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.
5 #include "components/surfaces/surfaces_output_surface.h"
8 #include "cc/output/compositor_frame.h"
9 #include "cc/output/context_provider.h"
10 #include "cc/output/output_surface_client.h"
11 #include "gpu/command_buffer/client/context_support.h"
12 #include "gpu/command_buffer/client/gles2_interface.h"
16 DirectOutputSurface::DirectOutputSurface(
17 const scoped_refptr
<cc::ContextProvider
>& context_provider
)
18 : cc::OutputSurface(context_provider
), weak_ptr_factory_(this) {
21 DirectOutputSurface::~DirectOutputSurface() {
24 void DirectOutputSurface::SwapBuffers(cc::CompositorFrame
* frame
) {
25 DCHECK(context_provider_
.get());
26 DCHECK(frame
->gl_frame_data
);
27 if (frame
->gl_frame_data
->sub_buffer_rect
==
28 gfx::Rect(frame
->gl_frame_data
->size
)) {
29 context_provider_
->ContextSupport()->Swap();
31 context_provider_
->ContextSupport()->PartialSwapBuffers(
32 frame
->gl_frame_data
->sub_buffer_rect
);
35 context_provider_
->ContextGL()->InsertSyncPointCHROMIUM();
36 context_provider_
->ContextSupport()->SignalSyncPoint(
37 sync_point
, base::Bind(&OutputSurface::OnSwapBuffersComplete
,
38 weak_ptr_factory_
.GetWeakPtr()));
39 client_
->DidSwapBuffers();