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..6b984d2ac0a666fa48a8454904cc4af2e0133ea2 100644 |
--- a/android_webview/browser/browser_view_renderer.cc |
+++ b/android_webview/browser/browser_view_renderer.cc |
@@ -112,6 +112,9 @@ void BrowserViewRenderer::TrimMemory(const int level, const bool visible) { |
TRIM_MEMORY_BACKGROUND = 40, |
}; |
+ if (!compositor_ || !hardware_enabled_) |
+ return; |
hush (inactive)
2014/10/18 01:34:01
ideally, (memory_policy_ != zero_policy) means com
boliu
2014/10/18 17:08:15
Done.
|
+ |
// Not urgent enough. TRIM_MEMORY_UI_HIDDEN is treated specially because |
// it does not indicate memory pressure, but merely that the app is |
// backgrounded. |
@@ -159,6 +162,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 +299,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); |
} |
} |
@@ -432,13 +436,15 @@ void BrowserViewRenderer::ReleaseHardware() { |
ReturnUnusedResource(shared_renderer_state_->PassCompositorFrame()); |
ReturnResourceFromParent(); |
DCHECK(shared_renderer_state_->ReturnedResourcesEmpty()); |
- |
- compositor_->ReleaseHwDraw(); |
hardware_enabled_ = false; |
+ GlobalTileManager::GetInstance()->Remove(tile_manager_key_); |
boliu
2014/10/18 17:08:15
Woo this is wrong. Ned to request 0 policy *before
|
+ |
+ if (!compositor_) |
+ return; |
+ compositor_->ReleaseHwDraw(); |
SynchronousCompositorMemoryPolicy zero_policy; |
RequestMemoryPolicy(zero_policy); |
- GlobalTileManager::GetInstance()->Remove(tile_manager_key_); |
} |
bool BrowserViewRenderer::IsVisible() const { |
@@ -463,9 +469,9 @@ void BrowserViewRenderer::DidDestroyCompositor( |
content::SynchronousCompositor* compositor) { |
TRACE_EVENT0("android_webview", "BrowserViewRenderer::DidDestroyCompositor"); |
DCHECK(compositor_); |
- compositor_ = NULL; |
SynchronousCompositorMemoryPolicy zero_policy; |
- DCHECK(memory_policy_ == zero_policy); |
+ RequestMemoryPolicy(zero_policy); |
+ compositor_ = NULL; |
hush (inactive)
2014/10/18 01:34:01
since didDestroyCompositor could be called before
boliu
2014/10/18 17:08:15
We do already, both OnDrawHardware and will skip i
|
} |
void BrowserViewRenderer::SetContinuousInvalidate(bool invalidate) { |