| Index: cc/delegating_renderer.cc
|
| diff --git a/cc/delegating_renderer.cc b/cc/delegating_renderer.cc
|
| deleted file mode 100644
|
| index 9792974ce265e183814e7943a0548c67bd53cd26..0000000000000000000000000000000000000000
|
| --- a/cc/delegating_renderer.cc
|
| +++ /dev/null
|
| @@ -1,199 +0,0 @@
|
| -// 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/delegating_renderer.h"
|
| -
|
| -#include <set>
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/debug/trace_event.h"
|
| -#include "base/string_util.h"
|
| -#include "base/strings/string_split.h"
|
| -#include "cc/checkerboard_draw_quad.h"
|
| -#include "cc/compositor_frame.h"
|
| -#include "cc/compositor_frame_ack.h"
|
| -#include "cc/debug_border_draw_quad.h"
|
| -#include "cc/render_pass.h"
|
| -#include "cc/render_pass_draw_quad.h"
|
| -#include "cc/resource_provider.h"
|
| -#include "cc/solid_color_draw_quad.h"
|
| -#include "cc/texture_draw_quad.h"
|
| -#include "cc/tile_draw_quad.h"
|
| -#include "cc/yuv_video_draw_quad.h"
|
| -#include "third_party/khronos/GLES2/gl2ext.h"
|
| -
|
| -using WebKit::WebGraphicsContext3D;
|
| -
|
| -namespace cc {
|
| -
|
| -scoped_ptr<DelegatingRenderer> DelegatingRenderer::Create(
|
| - RendererClient* client,
|
| - OutputSurface* output_surface,
|
| - ResourceProvider* resource_provider) {
|
| - scoped_ptr<DelegatingRenderer> renderer(
|
| - new DelegatingRenderer(client, output_surface, resource_provider));
|
| - if (!renderer->Initialize())
|
| - return scoped_ptr<DelegatingRenderer>();
|
| - return renderer.Pass();
|
| -}
|
| -
|
| -DelegatingRenderer::DelegatingRenderer(
|
| - RendererClient* client,
|
| - OutputSurface* output_surface,
|
| - ResourceProvider* resource_provider)
|
| - : Renderer(client),
|
| - output_surface_(output_surface),
|
| - resource_provider_(resource_provider),
|
| - visible_(true) {
|
| - DCHECK(resource_provider_);
|
| -}
|
| -
|
| -bool DelegatingRenderer::Initialize() {
|
| - capabilities_.using_partial_swap = false;
|
| - // TODO(danakj): Throttling - we may want to only allow 1 outstanding frame,
|
| - // but the parent compositor may pipeline for us.
|
| - // TODO(danakj): Can we use this in single-thread mode?
|
| - capabilities_.using_swap_complete_callback = true;
|
| - capabilities_.max_texture_size = resource_provider_->max_texture_size();
|
| - capabilities_.best_texture_format = resource_provider_->best_texture_format();
|
| - capabilities_.allow_partial_texture_updates = false;
|
| -
|
| - WebGraphicsContext3D* context3d = resource_provider_->GraphicsContext3D();
|
| -
|
| - if (!context3d) {
|
| - // Software compositing.
|
| - return true;
|
| - }
|
| -
|
| - if (!context3d->makeContextCurrent())
|
| - return false;
|
| -
|
| - context3d->setContextLostCallback(this);
|
| - context3d->pushGroupMarkerEXT("CompositorContext");
|
| -
|
| - std::string extensionsString =
|
| - UTF16ToASCII(context3d->getString(GL_EXTENSIONS));
|
| -
|
| - std::vector<std::string> extensions;
|
| - base::SplitString(extensionsString, ' ', &extensions);
|
| -
|
| - // TODO(danakj): We need non-GPU-specific paths for these things. This
|
| - // renderer shouldn't need to use context3d extensions directly.
|
| - bool hasReadBGRA = true;
|
| - bool hasSetVisibility = true;
|
| - bool hasIOSurface = true;
|
| - bool hasARBTextureRect = true;
|
| - bool hasGpuMemoryManager = true;
|
| - bool hasEGLImage = true;
|
| - for (size_t i = 0; i < extensions.size(); ++i) {
|
| - if (extensions[i] == "GL_EXT_read_format_bgra")
|
| - hasReadBGRA = true;
|
| - else if (extensions[i] == "GL_CHROMIUM_set_visibility")
|
| - hasSetVisibility = true;
|
| - else if (extensions[i] == "GL_CHROMIUM_iosurface")
|
| - hasIOSurface = true;
|
| - else if (extensions[i] == "GL_ARB_texture_rectangle")
|
| - hasARBTextureRect = true;
|
| - else if (extensions[i] == "GL_CHROMIUM_gpu_memory_manager")
|
| - hasGpuMemoryManager = true;
|
| - else if (extensions[i] == "GL_OES_EGL_image_external")
|
| - hasEGLImage = true;
|
| - }
|
| -
|
| - if (hasIOSurface)
|
| - DCHECK(hasARBTextureRect);
|
| -
|
| - capabilities_.using_accelerated_painting =
|
| - Settings().acceleratePainting &&
|
| - capabilities_.best_texture_format == GL_BGRA_EXT &&
|
| - hasReadBGRA;
|
| -
|
| - // TODO(piman): loop visibility to GPU process?
|
| - capabilities_.using_set_visibility = hasSetVisibility;
|
| -
|
| - // TODO(danakj): Support GpuMemoryManager.
|
| - capabilities_.using_gpu_memory_manager = false;
|
| -
|
| - capabilities_.using_egl_image = hasEGLImage;
|
| -
|
| - return true;
|
| -}
|
| -
|
| -DelegatingRenderer::~DelegatingRenderer() {
|
| - WebGraphicsContext3D* context3d = resource_provider_->GraphicsContext3D();
|
| - if (context3d)
|
| - context3d->setContextLostCallback(NULL);
|
| -}
|
| -
|
| -const RendererCapabilities& DelegatingRenderer::Capabilities() const {
|
| - return capabilities_;
|
| -}
|
| -
|
| -static ResourceProvider::ResourceId AppendToArray(
|
| - ResourceProvider::ResourceIdArray* array,
|
| - ResourceProvider::ResourceId id) {
|
| - array->push_back(id);
|
| - return id;
|
| -}
|
| -
|
| -void DelegatingRenderer::DrawFrame(
|
| - RenderPassList& render_passes_in_draw_order) {
|
| - TRACE_EVENT0("cc", "DelegatingRenderer::drawFrame");
|
| -
|
| - CompositorFrame out_frame;
|
| - out_frame.metadata = client_->MakeCompositorFrameMetadata();
|
| -
|
| - out_frame.delegated_frame_data = make_scoped_ptr(new DelegatedFrameData);
|
| -
|
| - // Collect all resource ids in the render passes into a ResourceIdArray.
|
| - ResourceProvider::ResourceIdArray resources;
|
| - DrawQuad::ResourceIteratorCallback append_to_array =
|
| - base::Bind(&AppendToArray, &resources);
|
| - for (size_t i = 0; i < render_passes_in_draw_order.size(); ++i) {
|
| - RenderPass* render_pass = render_passes_in_draw_order[i];
|
| - for (size_t j = 0; j < render_pass->quad_list.size(); ++j)
|
| - render_pass->quad_list[j]->IterateResources(append_to_array);
|
| - }
|
| -
|
| - // Move the render passes and resources into the |out_frame|.
|
| - DelegatedFrameData& out_data = *out_frame.delegated_frame_data;
|
| - out_data.render_pass_list.swap(render_passes_in_draw_order);
|
| - resource_provider_->PrepareSendToParent(resources, &out_data.resource_list);
|
| -
|
| - output_surface_->SendFrameToParentCompositor(&out_frame);
|
| -}
|
| -
|
| -bool DelegatingRenderer::SwapBuffers() {
|
| - return true;
|
| -}
|
| -
|
| -void DelegatingRenderer::GetFramebufferPixels(void* pixels, gfx::Rect rect) {
|
| - NOTIMPLEMENTED();
|
| -}
|
| -
|
| -void DelegatingRenderer::ReceiveCompositorFrameAck(
|
| - const CompositorFrameAck& ack) {
|
| - resource_provider_->ReceiveFromParent(ack.resources);
|
| - if (client_->HasImplThread())
|
| - client_->OnSwapBuffersComplete();
|
| -}
|
| -
|
| -
|
| -bool DelegatingRenderer::IsContextLost() {
|
| - WebGraphicsContext3D* context3d = resource_provider_->GraphicsContext3D();
|
| - if (!context3d)
|
| - return false;
|
| - return context3d->getGraphicsResetStatusARB() != GL_NO_ERROR;
|
| -}
|
| -
|
| -void DelegatingRenderer::SetVisible(bool visible) {
|
| - visible_ = visible;
|
| -}
|
| -
|
| -void DelegatingRenderer::onContextLost() {
|
| - client_->DidLoseOutputSurface();
|
| -}
|
| -
|
| -} // namespace cc
|
|
|