const LayerTreeSettings* settings,
OutputSurface* output_surface,
ResourceProvider* resource_provider) {
- scoped_ptr<DelegatingRenderer> renderer(new DelegatingRenderer(
+ return make_scoped_ptr(new DelegatingRenderer(
client, settings, output_surface, resource_provider));
- if (!renderer->Initialize())
- return scoped_ptr<DelegatingRenderer>();
- return renderer.Pass();
}
DelegatingRenderer::DelegatingRenderer(RendererClient* client,
ResourceProvider* resource_provider)
: Renderer(client, settings),
output_surface_(output_surface),
- resource_provider_(resource_provider),
- visible_(true) {
+ resource_provider_(resource_provider) {
DCHECK(resource_provider_);
-}
-bool DelegatingRenderer::Initialize() {
capabilities_.using_partial_swap = false;
capabilities_.max_texture_size = resource_provider_->max_texture_size();
capabilities_.best_texture_format = resource_provider_->best_texture_format();
capabilities_.allow_partial_texture_updates = false;
- capabilities_.using_offscreen_context3d = false;
if (!output_surface_->context_provider()) {
capabilities_.using_shared_memory_resources = true;
- capabilities_.using_map_image = settings_->use_map_image;
- return true;
- }
-
- const ContextProvider::Capabilities& caps =
- output_surface_->context_provider()->ContextCapabilities();
-
- DCHECK(!caps.gpu.iosurface || caps.gpu.texture_rectangle);
+ capabilities_.using_map_image = true;
+ } else {
+ const ContextProvider::Capabilities& caps =
+ output_surface_->context_provider()->ContextCapabilities();
- capabilities_.using_egl_image = caps.gpu.egl_image_external;
- capabilities_.using_map_image =
- settings_->use_map_image && caps.gpu.map_image;
+ DCHECK(!caps.gpu.iosurface || caps.gpu.texture_rectangle);
- capabilities_.allow_rasterize_on_demand = false;
+ capabilities_.using_egl_image = caps.gpu.egl_image_external;
+ capabilities_.using_map_image = caps.gpu.map_image;
- return true;
+ capabilities_.allow_rasterize_on_demand = false;
+ }
}
DelegatingRenderer::~DelegatingRenderer() {}
}
void DelegatingRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
- ContextProvider* offscreen_context_provider,
float device_scale_factor,
const gfx::Rect& device_viewport_rect,
const gfx::Rect& device_clip_rect,
return context_provider->IsContextLost();
}
-void DelegatingRenderer::SetVisible(bool visible) {
- if (visible == visible_)
- return;
-
- visible_ = visible;
+void DelegatingRenderer::DidChangeVisibility() {
ContextProvider* context_provider = output_surface_->context_provider();
- if (!visible_) {
+ if (!visible()) {
TRACE_EVENT0("cc", "DelegatingRenderer::SetVisible dropping resources");
resource_provider_->ReleaseCachedData();
- if (context_provider)
+ if (context_provider) {
+ context_provider->DeleteCachedResources();
context_provider->ContextGL()->Flush();
+ }
}
// We loop visibility to the GPU process, since that's what manages memory.
// That will allow it to feed us with memory allocations that we can act
// upon.
if (context_provider)
- context_provider->ContextSupport()->SetSurfaceVisible(visible);
+ context_provider->ContextSupport()->SetSurfaceVisible(visible());
}
void DelegatingRenderer::SendManagedMemoryStats(size_t bytes_visible,