blob: 3220476cf96e6cdaead1a1dbf47f6f73566976b6 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/trace_event/memory_dump_provider_info.h"
#include <tuple>
#include "base/sequenced_task_runner.h"
namespace base {
namespace trace_event {
MemoryDumpProviderInfo::MemoryDumpProviderInfo(
MemoryDumpProvider* dump_provider,
const char* name,
scoped_refptr<SequencedTaskRunner> task_runner,
const MemoryDumpProvider::Options& options,
bool whitelisted_for_background_mode)
: dump_provider(dump_provider),
options(options),
name(name),
task_runner(std::move(task_runner)),
whitelisted_for_background_mode(whitelisted_for_background_mode),
consecutive_failures(0),
disabled(false) {}
MemoryDumpProviderInfo::~MemoryDumpProviderInfo() = default;
bool MemoryDumpProviderInfo::Comparator::operator()(
const scoped_refptr<MemoryDumpProviderInfo>& a,
const scoped_refptr<MemoryDumpProviderInfo>& b) const {
if (!a || !b)
return a.get() < b.get();
// Ensure that unbound providers (task_runner == nullptr) always run last.
// Rationale: some unbound dump providers are known to be slow, keep them last
// to avoid skewing timings of the other dump providers.
return std::tie(a->task_runner, a->dump_provider) >
std::tie(b->task_runner, b->dump_provider);
}
} // namespace trace_event
} // namespace base