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