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