1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/trace_event/memory_dump_provider_info.h"
6
7 #include <tuple>
8
9 #include "base/sequenced_task_runner.h"
10
11 namespace base {
12 namespace trace_event {
13
MemoryDumpProviderInfo(MemoryDumpProvider * dump_provider,const char * name,scoped_refptr<SequencedTaskRunner> task_runner,const MemoryDumpProvider::Options & options,bool allowed_in_background_mode)14 MemoryDumpProviderInfo::MemoryDumpProviderInfo(
15 MemoryDumpProvider* dump_provider,
16 const char* name,
17 scoped_refptr<SequencedTaskRunner> task_runner,
18 const MemoryDumpProvider::Options& options,
19 bool allowed_in_background_mode)
20 : dump_provider(dump_provider),
21 options(options),
22 name(name),
23 task_runner(std::move(task_runner)),
24 allowed_in_background_mode(allowed_in_background_mode),
25 consecutive_failures(0),
26 disabled(false) {}
27
28 MemoryDumpProviderInfo::~MemoryDumpProviderInfo() = default;
29
operator ()(const scoped_refptr<MemoryDumpProviderInfo> & a,const scoped_refptr<MemoryDumpProviderInfo> & b) const30 bool MemoryDumpProviderInfo::Comparator::operator()(
31 const scoped_refptr<MemoryDumpProviderInfo>& a,
32 const scoped_refptr<MemoryDumpProviderInfo>& b) const {
33 if (!a || !b)
34 return a.get() < b.get();
35 // Ensure that unbound providers (task_runner == nullptr) always run last.
36 // Rationale: some unbound dump providers are known to be slow, keep them last
37 // to avoid skewing timings of the other dump providers.
38 return std::tie(a->task_runner, a->dump_provider) >
39 std::tie(b->task_runner, b->dump_provider);
40 }
41
42 } // namespace trace_event
43 } // namespace base
44