Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Side by Side Diff: content/gpu/gpu_child_thread.cc

Issue 2034393004: Allow multiple logging::LogMessage{Handler,Listener}s Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: use ReadWriteLock, add comments Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/gpu/gpu_child_thread.h" 5 #include "content/gpu/gpu_child_thread.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 #include "media/base/android/media_client_android.h" 53 #include "media/base/android/media_client_android.h"
54 #include "media/gpu/avda_surface_tracker.h" 54 #include "media/gpu/avda_surface_tracker.h"
55 #endif 55 #endif
56 56
57 namespace content { 57 namespace content {
58 namespace { 58 namespace {
59 59
60 static base::LazyInstance<scoped_refptr<ThreadSafeSender> > 60 static base::LazyInstance<scoped_refptr<ThreadSafeSender> >
61 g_thread_safe_sender = LAZY_INSTANCE_INITIALIZER; 61 g_thread_safe_sender = LAZY_INSTANCE_INITIALIZER;
62 62
63 bool GpuProcessLogMessageHandler(int severity,
64 const char* file, int line,
65 size_t message_start,
66 const std::string& str) {
67 std::string header = str.substr(0, message_start);
68 std::string message = str.substr(message_start);
69
70 g_thread_safe_sender.Get()->Send(
71 new GpuHostMsg_OnLogMessage(severity, header, message));
72
73 return false;
74 }
75
76 // Message filter used to to handle GpuMsg_CreateGpuMemoryBuffer messages 63 // Message filter used to to handle GpuMsg_CreateGpuMemoryBuffer messages
77 // on the IO thread. This allows the UI thread in the browser process to remain 64 // on the IO thread. This allows the UI thread in the browser process to remain
78 // fast at all times. 65 // fast at all times.
79 class GpuMemoryBufferMessageFilter : public IPC::MessageFilter { 66 class GpuMemoryBufferMessageFilter : public IPC::MessageFilter {
80 public: 67 public:
81 explicit GpuMemoryBufferMessageFilter( 68 explicit GpuMemoryBufferMessageFilter(
82 gpu::GpuMemoryBufferFactory* gpu_memory_buffer_factory) 69 gpu::GpuMemoryBufferFactory* gpu_memory_buffer_factory)
83 : gpu_memory_buffer_factory_(gpu_memory_buffer_factory), 70 : gpu_memory_buffer_factory_(gpu_memory_buffer_factory),
84 sender_(nullptr) {} 71 sender_(nullptr) {}
85 72
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 ->GetMessageFilter(); 121 ->GetMessageFilter();
135 if (message_filter) 122 if (message_filter)
136 builder.AddStartupFilter(message_filter); 123 builder.AddStartupFilter(message_filter);
137 #endif 124 #endif
138 125
139 return builder.Build(); 126 return builder.Build();
140 } 127 }
141 128
142 } // namespace 129 } // namespace
143 130
131 void GpuProcessLogMessageListener::OnMessage(int severity,
132 const char* file,
133 int line,
134 size_t message_start,
135 const std::string& str) {
136 std::string header = str.substr(0, message_start);
137 std::string message = str.substr(message_start);
138
139 g_thread_safe_sender.Get()->Send(
140 new GpuHostMsg_OnLogMessage(severity, header, message));
141 }
142
144 GpuChildThread::GpuChildThread( 143 GpuChildThread::GpuChildThread(
145 GpuWatchdogThread* watchdog_thread, 144 GpuWatchdogThread* watchdog_thread,
146 bool dead_on_arrival, 145 bool dead_on_arrival,
147 const gpu::GPUInfo& gpu_info, 146 const gpu::GPUInfo& gpu_info,
148 const DeferredMessages& deferred_messages, 147 const DeferredMessages& deferred_messages,
149 gpu::GpuMemoryBufferFactory* gpu_memory_buffer_factory) 148 gpu::GpuMemoryBufferFactory* gpu_memory_buffer_factory)
150 : ChildThreadImpl(GetOptions(gpu_memory_buffer_factory)), 149 : ChildThreadImpl(GetOptions(gpu_memory_buffer_factory)),
151 dead_on_arrival_(dead_on_arrival), 150 dead_on_arrival_(dead_on_arrival),
152 gpu_info_(gpu_info), 151 gpu_info_(gpu_info),
153 deferred_messages_(deferred_messages), 152 deferred_messages_(deferred_messages),
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 189
191 GpuChildThread::~GpuChildThread() { 190 GpuChildThread::~GpuChildThread() {
192 while (!deferred_messages_.empty()) { 191 while (!deferred_messages_.empty()) {
193 delete deferred_messages_.front(); 192 delete deferred_messages_.front();
194 deferred_messages_.pop(); 193 deferred_messages_.pop();
195 } 194 }
196 } 195 }
197 196
198 void GpuChildThread::Shutdown() { 197 void GpuChildThread::Shutdown() {
199 ChildThreadImpl::Shutdown(); 198 ChildThreadImpl::Shutdown();
200 logging::SetLogMessageHandler(NULL); 199 if (!in_browser_process_)
200 log_listener_.reset();
201 } 201 }
202 202
203 void GpuChildThread::Init(const base::Time& process_start_time) { 203 void GpuChildThread::Init(const base::Time& process_start_time) {
204 process_start_time_ = process_start_time; 204 process_start_time_ = process_start_time;
205 205
206 #if defined(OS_ANDROID) 206 #if defined(OS_ANDROID)
207 // When running in in-process mode, this has been set in the browser at 207 // When running in in-process mode, this has been set in the browser at
208 // ChromeBrowserMainPartsAndroid::PreMainMessageLoopRun(). 208 // ChromeBrowserMainPartsAndroid::PreMainMessageLoopRun().
209 if (!in_browser_process_) 209 if (!in_browser_process_)
210 media::SetMediaClientAndroid(GetContentClient()->GetMediaClientAndroid()); 210 media::SetMediaClientAndroid(GetContentClient()->GetMediaClientAndroid());
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 346
347 if (dead_on_arrival_) { 347 if (dead_on_arrival_) {
348 LOG(ERROR) << "Exiting GPU process due to errors during initialization"; 348 LOG(ERROR) << "Exiting GPU process due to errors during initialization";
349 base::MessageLoop::current()->QuitWhenIdle(); 349 base::MessageLoop::current()->QuitWhenIdle();
350 return; 350 return;
351 } 351 }
352 352
353 // We don't need to pipe log messages if we are running the GPU thread in 353 // We don't need to pipe log messages if we are running the GPU thread in
354 // the browser process. 354 // the browser process.
355 if (!in_browser_process_) 355 if (!in_browser_process_)
356 logging::SetLogMessageHandler(GpuProcessLogMessageHandler); 356 log_listener_ = base::MakeUnique<GpuProcessLogMessageListener>();
357 357
358 gpu::SyncPointManager* sync_point_manager = nullptr; 358 gpu::SyncPointManager* sync_point_manager = nullptr;
359 // Note SyncPointManager from ContentGpuClient cannot be owned by this. 359 // Note SyncPointManager from ContentGpuClient cannot be owned by this.
360 if (GetContentClient()->gpu()) 360 if (GetContentClient()->gpu())
361 sync_point_manager = GetContentClient()->gpu()->GetSyncPointManager(); 361 sync_point_manager = GetContentClient()->gpu()->GetSyncPointManager();
362 if (!sync_point_manager) { 362 if (!sync_point_manager) {
363 if (!owned_sync_point_manager_) { 363 if (!owned_sync_point_manager_) {
364 owned_sync_point_manager_.reset(new gpu::SyncPointManager(false)); 364 owned_sync_point_manager_.reset(new gpu::SyncPointManager(false));
365 } 365 }
366 sync_point_manager = owned_sync_point_manager_.get(); 366 sync_point_manager = owned_sync_point_manager_.get();
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 556
557 void GpuChildThread::BindServiceFactoryRequest( 557 void GpuChildThread::BindServiceFactoryRequest(
558 shell::mojom::ServiceFactoryRequest request) { 558 shell::mojom::ServiceFactoryRequest request) {
559 DVLOG(1) << "GPU: Binding shell::mojom::ServiceFactoryRequest"; 559 DVLOG(1) << "GPU: Binding shell::mojom::ServiceFactoryRequest";
560 DCHECK(service_factory_); 560 DCHECK(service_factory_);
561 service_factory_bindings_.AddBinding(service_factory_.get(), 561 service_factory_bindings_.AddBinding(service_factory_.get(),
562 std::move(request)); 562 std::move(request));
563 } 563 }
564 564
565 } // namespace content 565 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698