1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/aura/gpu_browser_compositor_output_surface.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "cc/output/compositor_frame.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/aura/reflector_impl.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace content { 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)GpuBrowserCompositorOutputSurface::GpuBrowserCompositorOutputSurface( 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<ContextProviderCommandBuffer>& context, 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int surface_id, 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) IDMap<BrowserCompositorOutputSurface>* output_surface_map, 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::MessageLoopProxy* compositor_message_loop, 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::WeakPtr<ui::Compositor> compositor) 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : BrowserCompositorOutputSurface(context, 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) surface_id, 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) output_surface_map, 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) compositor_message_loop, 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) compositor) {} 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)GpuBrowserCompositorOutputSurface::~GpuBrowserCompositorOutputSurface() {} 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void GpuBrowserCompositorOutputSurface::SwapBuffers( 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) cc::CompositorFrame* frame) { 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(frame->gl_frame_data); 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebGraphicsContext3DCommandBufferImpl* command_buffer_context = 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static_cast<WebGraphicsContext3DCommandBufferImpl*>( 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context_provider_->Context3d()); 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CommandBufferProxyImpl* command_buffer_proxy = 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) command_buffer_context->GetCommandBufferProxy(); 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(command_buffer_proxy); 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context_provider_->Context3d()->shallowFlushCHROMIUM(); 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) command_buffer_proxy->SetLatencyInfo(frame->metadata.latency_info); 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (reflector_.get()) { 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (frame->gl_frame_data->sub_buffer_rect == 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(frame->gl_frame_data->size)) 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) reflector_->OnSwapBuffers(); 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) else 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) reflector_->OnPostSubBuffer(frame->gl_frame_data->sub_buffer_rect); 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OutputSurface::SwapBuffers(frame); 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace content 52