Upstream version 5.34.92.0
[platform/framework/web/crosswalk.git] / src / content / browser / compositor / gpu_browser_compositor_output_surface.cc
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
12 namespace content {
13
14 GpuBrowserCompositorOutputSurface::GpuBrowserCompositorOutputSurface(
15     const scoped_refptr<ContextProviderCommandBuffer>& context,
16     int surface_id,
17     IDMap<BrowserCompositorOutputSurface>* output_surface_map,
18     base::MessageLoopProxy* compositor_message_loop,
19     base::WeakPtr<ui::Compositor> compositor)
20     : BrowserCompositorOutputSurface(context,
21                                      surface_id,
22                                      output_surface_map,
23                                      compositor_message_loop,
24                                      compositor) {}
25
26 GpuBrowserCompositorOutputSurface::~GpuBrowserCompositorOutputSurface() {}
27
28 void GpuBrowserCompositorOutputSurface::SwapBuffers(
29     cc::CompositorFrame* frame) {
30   DCHECK(frame->gl_frame_data);
31
32   ContextProviderCommandBuffer* provider_command_buffer =
33       static_cast<ContextProviderCommandBuffer*>(context_provider_.get());
34   CommandBufferProxyImpl* command_buffer_proxy =
35       provider_command_buffer->GetCommandBufferProxy();
36   DCHECK(command_buffer_proxy);
37   context_provider_->ContextGL()->ShallowFlushCHROMIUM();
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