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

Side by Side Diff: content/renderer/gpu/compositor_output_surface.cc

Issue 1126963006: Move VISUAL_STATE promise to activation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Current state (presubmit warnings, cc_unittests tests failing) Created 5 years, 7 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/renderer/gpu/compositor_output_surface.h" 5 #include "content/renderer/gpu/compositor_output_surface.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/message_loop/message_loop_proxy.h" 8 #include "base/message_loop/message_loop_proxy.h"
9 #include "cc/output/compositor_frame.h" 9 #include "cc/output/compositor_frame.h"
10 #include "cc/output/compositor_frame_ack.h" 10 #include "cc/output/compositor_frame_ack.h"
11 #include "cc/output/managed_memory_policy.h" 11 #include "cc/output/managed_memory_policy.h"
12 #include "cc/output/output_surface_client.h" 12 #include "cc/output/output_surface_client.h"
13 #include "content/common/gpu/client/command_buffer_proxy_impl.h" 13 #include "content/common/gpu/client/command_buffer_proxy_impl.h"
14 #include "content/common/gpu/client/context_provider_command_buffer.h" 14 #include "content/common/gpu/client/context_provider_command_buffer.h"
15 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" 15 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h"
16 #include "content/common/view_messages.h" 16 #include "content/common/view_messages.h"
17 #include "content/public/common/content_switches.h" 17 #include "content/public/common/content_switches.h"
18 #include "content/renderer/gpu/frame_swap_message_queue.h" 18 #include "content/renderer/gpu/frame_update_message_queue.h"
19 #include "content/renderer/render_thread_impl.h" 19 #include "content/renderer/render_thread_impl.h"
20 #include "gpu/command_buffer/client/context_support.h" 20 #include "gpu/command_buffer/client/context_support.h"
21 #include "gpu/command_buffer/client/gles2_interface.h" 21 #include "gpu/command_buffer/client/gles2_interface.h"
22 #include "ipc/ipc_sync_channel.h" 22 #include "ipc/ipc_sync_channel.h"
23 23
24 namespace { 24 namespace {
25 // There are several compositor surfaces in a process, but they share the same 25 // There are several compositor surfaces in a process, but they share the same
26 // compositor thread, so we use a simple int here to track prefer-smoothness. 26 // compositor thread, so we use a simple int here to track prefer-smoothness.
27 int g_prefer_smoothness_count = 0; 27 int g_prefer_smoothness_count = 0;
28 } // namespace 28 } // namespace
29 29
30 namespace content { 30 namespace content {
31 31
32 CompositorOutputSurface::CompositorOutputSurface( 32 CompositorOutputSurface::CompositorOutputSurface(
33 int32 routing_id, 33 int32 routing_id,
34 uint32 output_surface_id, 34 uint32 output_surface_id,
35 const scoped_refptr<ContextProviderCommandBuffer>& context_provider, 35 const scoped_refptr<ContextProviderCommandBuffer>& context_provider,
36 const scoped_refptr<ContextProviderCommandBuffer>& worker_context_provider, 36 const scoped_refptr<ContextProviderCommandBuffer>& worker_context_provider,
37 scoped_ptr<cc::SoftwareOutputDevice> software_device, 37 scoped_ptr<cc::SoftwareOutputDevice> software_device,
38 scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue, 38 scoped_refptr<FrameUpdateMessageQueue> swap_frame_message_queue,
39 bool use_swap_compositor_frame_message) 39 bool use_swap_compositor_frame_message)
40 : OutputSurface(context_provider, 40 : OutputSurface(context_provider,
41 worker_context_provider, 41 worker_context_provider,
42 software_device.Pass()), 42 software_device.Pass()),
43 output_surface_id_(output_surface_id), 43 output_surface_id_(output_surface_id),
44 use_swap_compositor_frame_message_(use_swap_compositor_frame_message), 44 use_swap_compositor_frame_message_(use_swap_compositor_frame_message),
45 output_surface_filter_( 45 output_surface_filter_(
46 RenderThreadImpl::current()->compositor_message_filter()), 46 RenderThreadImpl::current()->compositor_message_filter()),
47 frame_swap_message_queue_(swap_frame_message_queue), 47 frame_update_message_queue_(swap_frame_message_queue),
48 routing_id_(routing_id), 48 routing_id_(routing_id),
49 prefers_smoothness_(false), 49 prefers_smoothness_(false),
50 #if defined(OS_WIN) 50 #if defined(OS_WIN)
51 // TODO(epenner): Implement PlatformThread::CurrentHandle() on windows. 51 // TODO(epenner): Implement PlatformThread::CurrentHandle() on windows.
52 main_thread_handle_(base::PlatformThreadHandle()), 52 main_thread_handle_(base::PlatformThreadHandle()),
53 #else 53 #else
54 main_thread_handle_(base::PlatformThread::CurrentHandle()), 54 main_thread_handle_(base::PlatformThread::CurrentHandle()),
55 #endif 55 #endif
56 layout_test_mode_(RenderThreadImpl::current()->layout_test_mode()), 56 layout_test_mode_(RenderThreadImpl::current()->layout_test_mode()),
57 weak_ptrs_(this) { 57 weak_ptrs_(this) {
58 DCHECK(output_surface_filter_.get()); 58 DCHECK(output_surface_filter_.get());
59 DCHECK(frame_swap_message_queue_.get()); 59 DCHECK(frame_update_message_queue_.get());
60 DetachFromThread(); 60 DetachFromThread();
61 message_sender_ = RenderThreadImpl::current()->sync_message_filter(); 61 message_sender_ = RenderThreadImpl::current()->sync_message_filter();
62 DCHECK(message_sender_.get()); 62 DCHECK(message_sender_.get());
63 if (OutputSurface::software_device()) 63 if (OutputSurface::software_device())
64 capabilities_.max_frames_pending = 1; 64 capabilities_.max_frames_pending = 1;
65 } 65 }
66 66
67 CompositorOutputSurface::~CompositorOutputSurface() { 67 CompositorOutputSurface::~CompositorOutputSurface() {
68 DCHECK(CalledOnValidThread()); 68 DCHECK(CalledOnValidThread());
69 if (!HasClient()) 69 if (!HasClient())
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 closure); 147 closure);
148 } else { 148 } else {
149 base::MessageLoopProxy::current()->PostTask(FROM_HERE, closure); 149 base::MessageLoopProxy::current()->PostTask(FROM_HERE, closure);
150 } 150 }
151 client_->DidSwapBuffers(); 151 client_->DidSwapBuffers();
152 return; 152 return;
153 } else { 153 } else {
154 { 154 {
155 ScopedVector<IPC::Message> messages; 155 ScopedVector<IPC::Message> messages;
156 std::vector<IPC::Message> messages_to_deliver_with_frame; 156 std::vector<IPC::Message> messages_to_deliver_with_frame;
157 scoped_ptr<FrameSwapMessageQueue::SendMessageScope> send_message_scope = 157 scoped_ptr<FrameUpdateMessageQueue::SendMessageScope> send_message_scope =
158 frame_swap_message_queue_->AcquireSendMessageScope(); 158 frame_update_message_queue_->AcquireSendMessageScope();
159 frame_swap_message_queue_->DrainMessages(&messages); 159 frame_update_message_queue_->DrainMessagesForSwap(&messages);
160 FrameSwapMessageQueue::TransferMessages(messages, 160 FrameUpdateMessageQueue::TransferMessages(
161 &messages_to_deliver_with_frame); 161 messages, &messages_to_deliver_with_frame);
162 Send(new ViewHostMsg_SwapCompositorFrame(routing_id_, 162 Send(new ViewHostMsg_SwapCompositorFrame(routing_id_,
163 output_surface_id_, 163 output_surface_id_,
164 *frame, 164 *frame,
165 messages_to_deliver_with_frame)); 165 messages_to_deliver_with_frame));
166 // ~send_message_scope. 166 // ~send_message_scope.
167 } 167 }
168 client_->DidSwapBuffers(); 168 client_->DidSwapBuffers();
169 } 169 }
170 } 170 }
171 171
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 // If this is the last surface to stop preferring smoothness, 247 // If this is the last surface to stop preferring smoothness,
248 // Reset the main thread's priority to the default. 248 // Reset the main thread's priority to the default.
249 if (prefers_smoothness_ == true && 249 if (prefers_smoothness_ == true &&
250 --g_prefer_smoothness_count == 0) { 250 --g_prefer_smoothness_count == 0) {
251 SetThreadPriorityToDefault(main_thread_handle_); 251 SetThreadPriorityToDefault(main_thread_handle_);
252 } 252 }
253 prefers_smoothness_ = prefers_smoothness; 253 prefers_smoothness_ = prefers_smoothness;
254 } 254 }
255 255
256 } // namespace content 256 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698