Index: android_webview/browser/browser_view_renderer.cc |
diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc |
index 33fad4f66416fd69484580d57e6aa7c97a4af619..be3e162e70dc62ced2937e25eb82588e73f3501c 100644 |
--- a/android_webview/browser/browser_view_renderer.cc |
+++ b/android_webview/browser/browser_view_renderer.cc |
@@ -129,6 +129,8 @@ void BrowserViewRenderer::TrimMemory(const int level, const bool visible) { |
return; |
TRACE_EVENT0("android_webview", "BrowserViewRenderer::TrimMemory"); |
+ DCHECK(hardware_enabled_); |
+ DCHECK(compositor_); |
RequestMemoryPolicy(zero_policy); |
EnforceMemoryPolicyImmediately(zero_policy); |
@@ -159,6 +161,7 @@ BrowserViewRenderer::CalculateDesiredMemoryPolicy() { |
// well as the tile resource allocation in GlobalTileManager. |
void BrowserViewRenderer::RequestMemoryPolicy( |
SynchronousCompositorMemoryPolicy& new_policy) { |
+ DCHECK(compositor_); |
GlobalTileManager* manager = GlobalTileManager::GetInstance(); |
// The following line will call BrowserViewRenderer::SetMemoryPolicy(). |
@@ -295,14 +298,14 @@ void BrowserViewRenderer::ReturnUnusedResource( |
cc::CompositorFrameAck frame_ack; |
cc::TransferableResource::ReturnResources( |
frame->delegated_frame_data->resource_list, &frame_ack.resources); |
- if (!frame_ack.resources.empty()) |
+ if (compositor_ && !frame_ack.resources.empty()) |
compositor_->ReturnResources(frame_ack); |
} |
void BrowserViewRenderer::ReturnResourceFromParent() { |
cc::CompositorFrameAck frame_ack; |
shared_renderer_state_->SwapReturnedResources(&frame_ack.resources); |
- if (!frame_ack.resources.empty()) { |
+ if (compositor_ && !frame_ack.resources.empty()) { |
compositor_->ReturnResources(frame_ack); |
} |
} |
@@ -433,11 +436,13 @@ void BrowserViewRenderer::ReleaseHardware() { |
ReturnResourceFromParent(); |
DCHECK(shared_renderer_state_->ReturnedResourcesEmpty()); |
- compositor_->ReleaseHwDraw(); |
- hardware_enabled_ = false; |
+ if (compositor_) { |
+ compositor_->ReleaseHwDraw(); |
+ SynchronousCompositorMemoryPolicy zero_policy; |
+ RequestMemoryPolicy(zero_policy); |
+ } |
- SynchronousCompositorMemoryPolicy zero_policy; |
- RequestMemoryPolicy(zero_policy); |
+ hardware_enabled_ = false; |
GlobalTileManager::GetInstance()->Remove(tile_manager_key_); |
} |
@@ -463,9 +468,12 @@ void BrowserViewRenderer::DidDestroyCompositor( |
content::SynchronousCompositor* compositor) { |
TRACE_EVENT0("android_webview", "BrowserViewRenderer::DidDestroyCompositor"); |
DCHECK(compositor_); |
- compositor_ = NULL; |
SynchronousCompositorMemoryPolicy zero_policy; |
+ if (hardware_enabled_) { |
+ RequestMemoryPolicy(zero_policy); |
+ } |
DCHECK(memory_policy_ == zero_policy); |
+ compositor_ = NULL; |
} |
void BrowserViewRenderer::SetContinuousInvalidate(bool invalidate) { |