| Index: cc/test/fake_output_surface.cc
|
| diff --git a/cc/test/fake_output_surface.cc b/cc/test/fake_output_surface.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..052a87c203e8b83a1c9d119ebf5e493fb624f082
|
| --- /dev/null
|
| +++ b/cc/test/fake_output_surface.cc
|
| @@ -0,0 +1,139 @@
|
| +// Copyright 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "cc/test/fake_output_surface.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "cc/output/compositor_frame_ack.h"
|
| +#include "cc/output/output_surface_client.h"
|
| +#include "cc/resources/returned_resource.h"
|
| +#include "cc/test/begin_frame_args_test.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace cc {
|
| +
|
| +FakeOutputSurface::FakeOutputSurface(
|
| + scoped_refptr<ContextProvider> context_provider,
|
| + scoped_refptr<ContextProvider> worker_context_provider,
|
| + bool delegated_rendering)
|
| + : OutputSurface(context_provider, worker_context_provider),
|
| + client_(NULL),
|
| + num_sent_frames_(0),
|
| + has_external_stencil_test_(false),
|
| + framebuffer_(0) {
|
| + if (delegated_rendering) {
|
| + capabilities_.delegated_rendering = true;
|
| + capabilities_.max_frames_pending = 1;
|
| + }
|
| +}
|
| +
|
| +FakeOutputSurface::FakeOutputSurface(
|
| + scoped_refptr<ContextProvider> context_provider,
|
| + bool delegated_rendering)
|
| + : OutputSurface(context_provider),
|
| + client_(NULL),
|
| + num_sent_frames_(0),
|
| + has_external_stencil_test_(false),
|
| + framebuffer_(0) {
|
| + if (delegated_rendering) {
|
| + capabilities_.delegated_rendering = true;
|
| + capabilities_.max_frames_pending = 1;
|
| + }
|
| +}
|
| +
|
| +FakeOutputSurface::FakeOutputSurface(
|
| + scoped_ptr<SoftwareOutputDevice> software_device,
|
| + bool delegated_rendering)
|
| + : OutputSurface(software_device.Pass()),
|
| + client_(NULL),
|
| + num_sent_frames_(0),
|
| + has_external_stencil_test_(false),
|
| + framebuffer_(0) {
|
| + if (delegated_rendering) {
|
| + capabilities_.delegated_rendering = true;
|
| + capabilities_.max_frames_pending = 1;
|
| + }
|
| +}
|
| +
|
| +FakeOutputSurface::FakeOutputSurface(
|
| + scoped_refptr<ContextProvider> context_provider,
|
| + scoped_ptr<SoftwareOutputDevice> software_device,
|
| + bool delegated_rendering)
|
| + : OutputSurface(context_provider, software_device.Pass()),
|
| + client_(NULL),
|
| + num_sent_frames_(0),
|
| + has_external_stencil_test_(false),
|
| + framebuffer_(0) {
|
| + if (delegated_rendering) {
|
| + capabilities_.delegated_rendering = true;
|
| + capabilities_.max_frames_pending = 1;
|
| + }
|
| +}
|
| +
|
| +FakeOutputSurface::~FakeOutputSurface() {}
|
| +
|
| +void FakeOutputSurface::SwapBuffers(CompositorFrame* frame) {
|
| + if (frame->software_frame_data || frame->delegated_frame_data ||
|
| + !context_provider()) {
|
| + frame->AssignTo(&last_sent_frame_);
|
| +
|
| + if (last_sent_frame_.delegated_frame_data) {
|
| + resources_held_by_parent_.insert(
|
| + resources_held_by_parent_.end(),
|
| + last_sent_frame_.delegated_frame_data->resource_list.begin(),
|
| + last_sent_frame_.delegated_frame_data->resource_list.end());
|
| + }
|
| +
|
| + ++num_sent_frames_;
|
| + } else {
|
| + last_swap_rect_ = frame->gl_frame_data->sub_buffer_rect;
|
| + frame->AssignTo(&last_sent_frame_);
|
| + ++num_sent_frames_;
|
| + }
|
| + PostSwapBuffersComplete();
|
| + client_->DidSwapBuffers();
|
| +}
|
| +
|
| +void FakeOutputSurface::BindFramebuffer() {
|
| + if (framebuffer_)
|
| + context_provider_->ContextGL()->BindFramebuffer(GL_FRAMEBUFFER,
|
| + framebuffer_);
|
| + else
|
| + OutputSurface::BindFramebuffer();
|
| +}
|
| +
|
| +bool FakeOutputSurface::BindToClient(OutputSurfaceClient* client) {
|
| + if (OutputSurface::BindToClient(client)) {
|
| + client_ = client;
|
| + return true;
|
| + } else {
|
| + return false;
|
| + }
|
| +}
|
| +
|
| +void FakeOutputSurface::SetTreeActivationCallback(
|
| + const base::Closure& callback) {
|
| + DCHECK(client_);
|
| + client_->SetTreeActivationCallback(callback);
|
| +}
|
| +
|
| +void FakeOutputSurface::ReturnResource(unsigned id, CompositorFrameAck* ack) {
|
| + TransferableResourceArray::iterator it;
|
| + for (it = resources_held_by_parent_.begin();
|
| + it != resources_held_by_parent_.end();
|
| + ++it) {
|
| + if (it->id == id)
|
| + break;
|
| + }
|
| + DCHECK(it != resources_held_by_parent_.end());
|
| + ack->resources.push_back(it->ToReturnedResource());
|
| + resources_held_by_parent_.erase(it);
|
| +}
|
| +
|
| +bool FakeOutputSurface::HasExternalStencilTest() const {
|
| + return has_external_stencil_test_;
|
| +}
|
| +
|
| +} // namespace cc
|
|
|