Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: android_webview/browser/browser_view_renderer.cc

Issue 408803002: aw: Release hardware onTrimMemory(MODERATE) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: auto reset Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "android_webview/browser/browser_view_renderer.h" 5 #include "android_webview/browser/browser_view_renderer.h"
6 6
7 #include "android_webview/browser/browser_view_renderer_client.h" 7 #include "android_webview/browser/browser_view_renderer_client.h"
8 #include "android_webview/browser/shared_renderer_state.h" 8 #include "android_webview/browser/shared_renderer_state.h"
9 #include "android_webview/common/aw_switches.h" 9 #include "android_webview/common/aw_switches.h"
10 #include "android_webview/public/browser/draw_gl.h" 10 #include "android_webview/public/browser/draw_gl.h"
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 return OnDrawSoftware(java_canvas); 233 return OnDrawSoftware(java_canvas);
234 } 234 }
235 235
236 bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) { 236 bool BrowserViewRenderer::OnDrawHardware(jobject java_canvas) {
237 if (!compositor_) 237 if (!compositor_)
238 return false; 238 return false;
239 239
240 if (!hardware_enabled_) { 240 if (!hardware_enabled_) {
241 hardware_enabled_ = compositor_->InitializeHwDraw(); 241 hardware_enabled_ = compositor_->InitializeHwDraw();
242 if (hardware_enabled_) { 242 if (hardware_enabled_) {
243 tile_manager_key_ = GlobalTileManager::GetInstance()->PushBack(this);
243 gpu::GLInProcessContext* share_context = compositor_->GetShareContext(); 244 gpu::GLInProcessContext* share_context = compositor_->GetShareContext();
244 DCHECK(share_context); 245 DCHECK(share_context);
245 shared_renderer_state_->SetSharedContext(share_context); 246 shared_renderer_state_->SetSharedContext(share_context);
246 } 247 }
247 } 248 }
248 if (!hardware_enabled_) 249 if (!hardware_enabled_)
249 return false; 250 return false;
250 251
251 ReturnResourceFromParent(); 252 ReturnResourceFromParent();
252 SynchronousCompositorMemoryPolicy new_policy = CalculateDesiredMemoryPolicy(); 253 SynchronousCompositorMemoryPolicy new_policy = CalculateDesiredMemoryPolicy();
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 void BrowserViewRenderer::OnAttachedToWindow(int width, int height) { 398 void BrowserViewRenderer::OnAttachedToWindow(int width, int height) {
398 TRACE_EVENT2("android_webview", 399 TRACE_EVENT2("android_webview",
399 "BrowserViewRenderer::OnAttachedToWindow", 400 "BrowserViewRenderer::OnAttachedToWindow",
400 "width", 401 "width",
401 width, 402 width,
402 "height", 403 "height",
403 height); 404 height);
404 attached_to_window_ = true; 405 attached_to_window_ = true;
405 width_ = width; 406 width_ = width;
406 height_ = height; 407 height_ = height;
407 tile_manager_key_ = GlobalTileManager::GetInstance()->PushBack(this);
408 } 408 }
409 409
410 void BrowserViewRenderer::OnDetachedFromWindow() { 410 void BrowserViewRenderer::OnDetachedFromWindow() {
411 TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDetachedFromWindow"); 411 TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDetachedFromWindow");
412 attached_to_window_ = false; 412 attached_to_window_ = false;
413 if (hardware_enabled_) { 413 DCHECK(!hardware_enabled_);
414 ReturnUnusedResource(shared_renderer_state_->PassDrawGLInput()); 414 }
415 ReturnResourceFromParent();
416 DCHECK(shared_renderer_state_->ReturnedResourcesEmpty());
417 415
418 compositor_->ReleaseHwDraw(); 416 void BrowserViewRenderer::ReleaseHardware() {
419 shared_renderer_state_->SetSharedContext(NULL); 417 DCHECK(hardware_enabled_);
420 hardware_enabled_ = false; 418 ReturnUnusedResource(shared_renderer_state_->PassDrawGLInput());
421 } 419 ReturnResourceFromParent();
420 DCHECK(shared_renderer_state_->ReturnedResourcesEmpty());
421
422 compositor_->ReleaseHwDraw();
423 shared_renderer_state_->SetSharedContext(NULL);
424 hardware_enabled_ = false;
425
422 SynchronousCompositorMemoryPolicy zero_policy; 426 SynchronousCompositorMemoryPolicy zero_policy;
423 RequestMemoryPolicy(zero_policy); 427 RequestMemoryPolicy(zero_policy);
424 GlobalTileManager::GetInstance()->Remove(tile_manager_key_); 428 GlobalTileManager::GetInstance()->Remove(tile_manager_key_);
425 // The hardware resources are released in the destructor of hardware renderer,
426 // so we don't need to do it here.
427 // See AwContents::ReleaseHardwareDrawOnRenderThread(JNIEnv*, jobject).
428 } 429 }
429 430
430 bool BrowserViewRenderer::IsVisible() const { 431 bool BrowserViewRenderer::IsVisible() const {
431 // Ignore |window_visible_| if |attached_to_window_| is false. 432 // Ignore |window_visible_| if |attached_to_window_| is false.
432 return view_visible_ && (!attached_to_window_ || window_visible_); 433 return view_visible_ && (!attached_to_window_ || window_visible_);
433 } 434 }
434 435
435 gfx::Rect BrowserViewRenderer::GetScreenRect() const { 436 gfx::Rect BrowserViewRenderer::GetScreenRect() const {
436 return gfx::Rect(client_->GetLocationOnScreen(), gfx::Size(width_, height_)); 437 return gfx::Rect(client_->GetLocationOnScreen(), gfx::Size(width_, height_));
437 } 438 }
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 base::StringAppendF(&str, 752 base::StringAppendF(&str,
752 "surface width height: [%d %d] ", 753 "surface width height: [%d %d] ",
753 draw_info->width, 754 draw_info->width,
754 draw_info->height); 755 draw_info->height);
755 base::StringAppendF(&str, "is_layer: %d ", draw_info->is_layer); 756 base::StringAppendF(&str, "is_layer: %d ", draw_info->is_layer);
756 } 757 }
757 return str; 758 return str;
758 } 759 }
759 760
760 } // namespace android_webview 761 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698