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

Side by Side Diff: content/common/gpu/gpu_channel.cc

Issue 1231263003: Share SyncPointManager between ipc and in-process (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove forward decl/includes Created 5 years, 5 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 #if defined(OS_WIN) 5 #if defined(OS_WIN)
6 #include <windows.h> 6 #include <windows.h>
7 #endif 7 #endif
8 8
9 #include "content/common/gpu/gpu_channel.h" 9 #include "content/common/gpu/gpu_channel.h"
10 10
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 // one shot (see constants above). 75 // one shot (see constants above).
76 // - it handles the GpuCommandBufferMsg_InsertSyncPoint message on the IO 76 // - it handles the GpuCommandBufferMsg_InsertSyncPoint message on the IO
77 // thread, generating the sync point ID and responding immediately, and then 77 // thread, generating the sync point ID and responding immediately, and then
78 // posting a task to insert the GpuCommandBufferMsg_RetireSyncPoint message 78 // posting a task to insert the GpuCommandBufferMsg_RetireSyncPoint message
79 // into the channel's queue. 79 // into the channel's queue.
80 // - it generates mailbox names for clients of the GPU process on the IO thread. 80 // - it generates mailbox names for clients of the GPU process on the IO thread.
81 class GpuChannelMessageFilter : public IPC::MessageFilter { 81 class GpuChannelMessageFilter : public IPC::MessageFilter {
82 public: 82 public:
83 GpuChannelMessageFilter( 83 GpuChannelMessageFilter(
84 base::WeakPtr<GpuChannel> gpu_channel, 84 base::WeakPtr<GpuChannel> gpu_channel,
85 scoped_refptr<gpu::SyncPointManager> sync_point_manager, 85 gpu::SyncPointManager* sync_point_manager,
86 scoped_refptr<base::SingleThreadTaskRunner> task_runner, 86 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
87 bool future_sync_points) 87 bool future_sync_points)
88 : preemption_state_(IDLE), 88 : preemption_state_(IDLE),
89 gpu_channel_(gpu_channel), 89 gpu_channel_(gpu_channel),
90 sender_(NULL), 90 sender_(NULL),
91 sync_point_manager_(sync_point_manager), 91 sync_point_manager_(sync_point_manager),
92 task_runner_(task_runner), 92 task_runner_(task_runner),
93 messages_forwarded_to_channel_(0), 93 messages_forwarded_to_channel_(0),
94 a_stub_is_descheduled_(false), 94 a_stub_is_descheduled_(false),
95 future_sync_points_(future_sync_points) {} 95 future_sync_points_(future_sync_points) {}
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 360
361 preemption_state_ = WOULD_PREEMPT_DESCHEDULED; 361 preemption_state_ = WOULD_PREEMPT_DESCHEDULED;
362 preempting_flag_->Reset(); 362 preempting_flag_->Reset();
363 TRACE_COUNTER_ID1("gpu", "GpuChannel::Preempting", this, 0); 363 TRACE_COUNTER_ID1("gpu", "GpuChannel::Preempting", this, 0);
364 364
365 UpdatePreemptionState(); 365 UpdatePreemptionState();
366 } 366 }
367 367
368 static void InsertSyncPointOnMainThread( 368 static void InsertSyncPointOnMainThread(
369 base::WeakPtr<GpuChannel> gpu_channel, 369 base::WeakPtr<GpuChannel> gpu_channel,
370 scoped_refptr<gpu::SyncPointManager> manager, 370 gpu::SyncPointManager* manager,
371 int32 routing_id, 371 int32 routing_id,
372 bool retire, 372 bool retire,
373 uint32 sync_point) { 373 uint32 sync_point) {
374 // This function must ensure that the sync point will be retired. Normally 374 // This function must ensure that the sync point will be retired. Normally
375 // we'll find the stub based on the routing ID, and associate the sync point 375 // we'll find the stub based on the routing ID, and associate the sync point
376 // with it, but if that fails for any reason (channel or stub already 376 // with it, but if that fails for any reason (channel or stub already
377 // deleted, invalid routing id), we need to retire the sync point 377 // deleted, invalid routing id), we need to retire the sync point
378 // immediately. 378 // immediately.
379 if (gpu_channel) { 379 if (gpu_channel) {
380 GpuCommandBufferStub* stub = gpu_channel->LookupCommandBuffer(routing_id); 380 GpuCommandBufferStub* stub = gpu_channel->LookupCommandBuffer(routing_id);
381 if (stub) { 381 if (stub) {
382 stub->AddSyncPoint(sync_point); 382 stub->AddSyncPoint(sync_point);
383 if (retire) { 383 if (retire) {
384 GpuCommandBufferMsg_RetireSyncPoint message(routing_id, sync_point); 384 GpuCommandBufferMsg_RetireSyncPoint message(routing_id, sync_point);
385 gpu_channel->OnMessageReceived(message); 385 gpu_channel->OnMessageReceived(message);
386 } 386 }
387 return; 387 return;
388 } else { 388 } else {
389 gpu_channel->MessageProcessed(); 389 gpu_channel->MessageProcessed();
390 } 390 }
391 } 391 }
392 manager->RetireSyncPoint(sync_point); 392 manager->RetireSyncPoint(sync_point);
393 } 393 }
394 394
395 // NOTE: this weak pointer is never dereferenced on the IO thread, it's only 395 // NOTE: this weak pointer is never dereferenced on the IO thread, it's only
396 // passed through - therefore the WeakPtr assumptions are respected. 396 // passed through - therefore the WeakPtr assumptions are respected.
397 base::WeakPtr<GpuChannel> gpu_channel_; 397 base::WeakPtr<GpuChannel> gpu_channel_;
398 IPC::Sender* sender_; 398 IPC::Sender* sender_;
399 scoped_refptr<gpu::SyncPointManager> sync_point_manager_; 399 gpu::SyncPointManager* sync_point_manager_;
400 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 400 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
401 scoped_refptr<gpu::PreemptionFlag> preempting_flag_; 401 scoped_refptr<gpu::PreemptionFlag> preempting_flag_;
402 402
403 std::queue<PendingMessage> pending_messages_; 403 std::queue<PendingMessage> pending_messages_;
404 404
405 // Count of the number of IPCs forwarded to the GpuChannel. 405 // Count of the number of IPCs forwarded to the GpuChannel.
406 uint64 messages_forwarded_to_channel_; 406 uint64 messages_forwarded_to_channel_;
407 407
408 base::OneShotTimer<GpuChannelMessageFilter> timer_; 408 base::OneShotTimer<GpuChannelMessageFilter> timer_;
409 409
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
895 pmd->CreateAllocatorDump(base::StringPrintf("gl/%s", dump_name.c_str())); 895 pmd->CreateAllocatorDump(base::StringPrintf("gl/%s", dump_name.c_str()));
896 896
897 dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize, 897 dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize,
898 base::trace_event::MemoryAllocatorDump::kUnitsBytes, 898 base::trace_event::MemoryAllocatorDump::kUnitsBytes,
899 GetMemoryUsage()); 899 GetMemoryUsage());
900 900
901 return true; 901 return true;
902 } 902 }
903 903
904 } // namespace content 904 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/android/in_process/synchronous_compositor_impl.cc ('k') | content/common/gpu/gpu_channel_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698