OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/gpu/chrome_content_gpu_client.h" | 5 #include "chrome/gpu/chrome_content_gpu_client.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
12 #include "base/threading/platform_thread.h" | 12 #include "base/threading/platform_thread.h" |
13 #include "base/time/time.h" | 13 #include "base/time/time.h" |
| 14 #include "chrome/common/stack_sampling_configuration.h" |
14 #include "components/metrics/child_call_stack_profile_collector.h" | 15 #include "components/metrics/child_call_stack_profile_collector.h" |
15 #include "mojo/public/cpp/bindings/strong_binding.h" | 16 #include "mojo/public/cpp/bindings/strong_binding.h" |
16 #include "services/shell/public/cpp/connector.h" | 17 #include "services/shell/public/cpp/connector.h" |
17 #include "services/shell/public/cpp/interface_registry.h" | 18 #include "services/shell/public/cpp/interface_registry.h" |
18 | 19 |
19 #if defined(OS_CHROMEOS) | 20 #if defined(OS_CHROMEOS) |
20 #include "chrome/gpu/gpu_arc_video_service.h" | 21 #include "chrome/gpu/gpu_arc_video_service.h" |
21 #endif | 22 #endif |
22 | 23 |
23 namespace { | 24 namespace { |
24 | 25 |
25 #if defined(OS_CHROMEOS) | 26 #if defined(OS_CHROMEOS) |
26 void DeprecatedCreateGpuArcVideoService( | 27 void DeprecatedCreateGpuArcVideoService( |
27 const gpu::GpuPreferences& gpu_preferences, | 28 const gpu::GpuPreferences& gpu_preferences, |
28 ::arc::mojom::VideoAcceleratorServiceClientRequest client_request) { | 29 ::arc::mojom::VideoAcceleratorServiceClientRequest client_request) { |
29 chromeos::arc::GpuArcVideoService::DeprecatedConnect( | 30 chromeos::arc::GpuArcVideoService::DeprecatedConnect( |
30 base::MakeUnique<chromeos::arc::GpuArcVideoService>(gpu_preferences), | 31 base::MakeUnique<chromeos::arc::GpuArcVideoService>(gpu_preferences), |
31 std::move(client_request)); | 32 std::move(client_request)); |
32 } | 33 } |
33 | 34 |
34 void CreateGpuArcVideoService( | 35 void CreateGpuArcVideoService( |
35 const gpu::GpuPreferences& gpu_preferences, | 36 const gpu::GpuPreferences& gpu_preferences, |
36 ::arc::mojom::VideoAcceleratorServiceRequest request) { | 37 ::arc::mojom::VideoAcceleratorServiceRequest request) { |
37 mojo::MakeStrongBinding( | 38 mojo::MakeStrongBinding( |
38 base::MakeUnique<chromeos::arc::GpuArcVideoService>(gpu_preferences), | 39 base::MakeUnique<chromeos::arc::GpuArcVideoService>(gpu_preferences), |
39 std::move(request)); | 40 std::move(request)); |
40 } | 41 } |
41 #endif | 42 #endif |
42 | 43 |
43 // Returns appropriate parameters for stack sampling on startup. | |
44 base::StackSamplingProfiler::SamplingParams GetStartupSamplingParams() { | |
45 base::StackSamplingProfiler::SamplingParams params; | |
46 params.initial_delay = base::TimeDelta::FromMilliseconds(0); | |
47 params.bursts = 1; | |
48 params.samples_per_burst = 300; | |
49 params.sampling_interval = base::TimeDelta::FromMilliseconds(100); | |
50 return params; | |
51 } | |
52 | |
53 base::LazyInstance<metrics::ChildCallStackProfileCollector>::Leaky | 44 base::LazyInstance<metrics::ChildCallStackProfileCollector>::Leaky |
54 g_call_stack_profile_collector = LAZY_INSTANCE_INITIALIZER; | 45 g_call_stack_profile_collector = LAZY_INSTANCE_INITIALIZER; |
55 | 46 |
56 } // namespace | 47 } // namespace |
57 | 48 |
58 ChromeContentGpuClient::ChromeContentGpuClient() | 49 ChromeContentGpuClient::ChromeContentGpuClient() |
59 : stack_sampling_profiler_( | 50 : stack_sampling_profiler_( |
60 base::PlatformThread::CurrentId(), | 51 base::PlatformThread::CurrentId(), |
61 GetStartupSamplingParams(), | 52 StackSamplingConfiguration::Get()->GetSamplingParamsForCurrentProcess(), |
62 g_call_stack_profile_collector.Get().GetProfilerCallback( | 53 g_call_stack_profile_collector.Get().GetProfilerCallback( |
63 metrics::CallStackProfileParams( | 54 metrics::CallStackProfileParams( |
64 metrics::CallStackProfileParams::GPU_PROCESS, | 55 metrics::CallStackProfileParams::GPU_PROCESS, |
65 metrics::CallStackProfileParams::GPU_MAIN_THREAD, | 56 metrics::CallStackProfileParams::GPU_MAIN_THREAD, |
66 metrics::CallStackProfileParams::PROCESS_STARTUP, | 57 metrics::CallStackProfileParams::PROCESS_STARTUP, |
67 metrics::CallStackProfileParams::MAY_SHUFFLE))) { | 58 metrics::CallStackProfileParams::MAY_SHUFFLE))) { |
| 59 if (StackSamplingConfiguration::Get()->IsProfilerEnabledForCurrentProcess()) |
| 60 stack_sampling_profiler_.Start(); |
68 } | 61 } |
69 | 62 |
70 ChromeContentGpuClient::~ChromeContentGpuClient() {} | 63 ChromeContentGpuClient::~ChromeContentGpuClient() {} |
71 | 64 |
72 void ChromeContentGpuClient::Initialize( | 65 void ChromeContentGpuClient::Initialize( |
73 base::FieldTrialList::Observer* observer) { | 66 base::FieldTrialList::Observer* observer) { |
74 DCHECK(!field_trial_syncer_); | 67 DCHECK(!field_trial_syncer_); |
75 field_trial_syncer_.reset( | 68 field_trial_syncer_.reset( |
76 new chrome_variations::ChildProcessFieldTrialSyncer(observer)); | 69 new chrome_variations::ChildProcessFieldTrialSyncer(observer)); |
77 const base::CommandLine& command_line = | 70 const base::CommandLine& command_line = |
(...skipping 12 matching lines...) Expand all Loading... |
90 #endif | 83 #endif |
91 } | 84 } |
92 | 85 |
93 void ChromeContentGpuClient::ConsumeInterfacesFromBrowser( | 86 void ChromeContentGpuClient::ConsumeInterfacesFromBrowser( |
94 shell::InterfaceProvider* provider) { | 87 shell::InterfaceProvider* provider) { |
95 metrics::mojom::CallStackProfileCollectorPtr browser_interface; | 88 metrics::mojom::CallStackProfileCollectorPtr browser_interface; |
96 provider->GetInterface(&browser_interface); | 89 provider->GetInterface(&browser_interface); |
97 g_call_stack_profile_collector.Get().SetParentProfileCollector( | 90 g_call_stack_profile_collector.Get().SetParentProfileCollector( |
98 std::move(browser_interface)); | 91 std::move(browser_interface)); |
99 } | 92 } |
OLD | NEW |