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/mus/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) {}
20 DirectOutputSurface::~DirectOutputSurface() {}
22 void DirectOutputSurface::SwapBuffers(cc::CompositorFrame
* frame
) {
23 DCHECK(context_provider_
.get());
24 DCHECK(frame
->gl_frame_data
);
25 if (frame
->gl_frame_data
->sub_buffer_rect
==
26 gfx::Rect(frame
->gl_frame_data
->size
)) {
27 context_provider_
->ContextSupport()->Swap();
29 context_provider_
->ContextSupport()->PartialSwapBuffers(
30 frame
->gl_frame_data
->sub_buffer_rect
);
33 context_provider_
->ContextGL()->InsertSyncPointCHROMIUM();
34 context_provider_
->ContextSupport()->SignalSyncPoint(
35 sync_point
, base::Bind(&OutputSurface::OnSwapBuffersComplete
,
36 weak_ptr_factory_
.GetWeakPtr()));
37 client_
->DidSwapBuffers();