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