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

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

Issue 1082393003: TrimMemory strategy while offscreenPreRaster is on. (Closed) Base URL: https://chromium.googlesource.com/a/chromium/src.git@master
Patch Set: Created 5 years, 8 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
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/shared_renderer_state.h" 5 #include "android_webview/browser/shared_renderer_state.h"
6 6
7 #include "android_webview/browser/browser_view_renderer.h" 7 #include "android_webview/browser/browser_view_renderer.h"
8 #include "android_webview/browser/child_frame.h" 8 #include "android_webview/browser/child_frame.h"
9 #include "android_webview/browser/deferred_gpu_command_service.h" 9 #include "android_webview/browser/deferred_gpu_command_service.h"
10 #include "android_webview/browser/hardware_renderer.h" 10 #include "android_webview/browser/hardware_renderer.h"
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 280
281 hardware_renderer_->DrawGL(state_restore.stencil_enabled(), 281 hardware_renderer_->DrawGL(state_restore.stencil_enabled(),
282 state_restore.framebuffer_binding_ext(), 282 state_restore.framebuffer_binding_ext(),
283 draw_info); 283 draw_info);
284 DeferredGpuCommandService::GetInstance()->PerformIdleWork(false); 284 DeferredGpuCommandService::GetInstance()->PerformIdleWork(false);
285 } 285 }
286 286
287 void SharedRendererState::ReleaseHardwareDrawIfNeededOnUI() { 287 void SharedRendererState::ReleaseHardwareDrawIfNeededOnUI() {
288 DCHECK(ui_loop_->BelongsToCurrentThread()); 288 DCHECK(ui_loop_->BelongsToCurrentThread());
289 InsideHardwareReleaseReset auto_inside_hardware_release_reset(this); 289 InsideHardwareReleaseReset auto_inside_hardware_release_reset(this);
290 bool offscreen_pre_raster = browser_view_renderer_->offscreen_pre_raster();
290 291
291 browser_view_renderer_->DetachFunctorFromView(); 292 browser_view_renderer_->DetachFunctorFromView();
292 bool hardware_initialized = browser_view_renderer_->hardware_enabled(); 293 bool hardware_initialized = browser_view_renderer_->hardware_enabled();
293 if (hardware_initialized) { 294 if (hardware_initialized) {
294 bool draw_functor_succeeded = browser_view_renderer_->RequestDrawGL(true); 295 bool draw_functor_succeeded = browser_view_renderer_->RequestDrawGL(true);
295 if (!draw_functor_succeeded) { 296 if (!draw_functor_succeeded) {
296 LOG(ERROR) << "Unable to free GL resources. Has the Window leaked?"; 297 LOG(ERROR) << "Unable to free GL resources. Has the Window leaked?";
297 // Calling release on wrong thread intentionally. 298 // Calling release on wrong thread intentionally.
298 AwDrawGLInfo info; 299 AwDrawGLInfo info;
299 info.mode = AwDrawGLInfo::kModeProcess; 300 info.mode = AwDrawGLInfo::kModeProcess;
300 DrawGL(&info); 301 DrawGL(&info);
301 } 302 }
302 303
303 browser_view_renderer_->ReleaseHardware(); 304 if (!offscreen_pre_raster)
305 browser_view_renderer_->ReleaseHardware();
boliu 2015/04/15 00:31:01 Then this is also skipping ReleaseHardware in deta
hush (inactive) 2015/04/15 21:35:48 Yeah. That is a problem. And it actually caused so
304 } 306 }
305 307
306 GLViewRendererManager* manager = GLViewRendererManager::GetInstance(); 308 GLViewRendererManager* manager = GLViewRendererManager::GetInstance();
307 309
308 { 310 {
309 base::AutoLock lock(lock_); 311 base::AutoLock lock(lock_);
310 if (renderer_manager_key_ != manager->NullKey()) { 312 if (renderer_manager_key_ != manager->NullKey()) {
311 manager->Remove(renderer_manager_key_); 313 manager->Remove(renderer_manager_key_);
312 renderer_manager_key_ = manager->NullKey(); 314 renderer_manager_key_ = manager->NullKey();
313 } 315 }
314 } 316 }
315 317
316 if (hardware_initialized) { 318 if (hardware_initialized && !offscreen_pre_raster) {
317 // Flush any invoke functors that's caused by ReleaseHardware. 319 // Flush any invoke functors that's caused by ReleaseHardware.
318 browser_view_renderer_->RequestDrawGL(true); 320 browser_view_renderer_->RequestDrawGL(true);
319 } 321 }
320 } 322 }
321 323
322 void SharedRendererState::InitializeHardwareDrawIfNeededOnUI() { 324 void SharedRendererState::InitializeHardwareDrawIfNeededOnUI() {
323 DCHECK(ui_loop_->BelongsToCurrentThread()); 325 DCHECK(ui_loop_->BelongsToCurrentThread());
324 GLViewRendererManager* manager = GLViewRendererManager::GetInstance(); 326 GLViewRendererManager* manager = GLViewRendererManager::GetInstance();
325 327
326 base::AutoLock lock(lock_); 328 base::AutoLock lock(lock_);
327 if (renderer_manager_key_ == manager->NullKey()) { 329 if (renderer_manager_key_ == manager->NullKey()) {
328 renderer_manager_key_ = manager->PushBack(this); 330 renderer_manager_key_ = manager->PushBack(this);
329 DeferredGpuCommandService::SetInstance(); 331 DeferredGpuCommandService::SetInstance();
330 } 332 }
331 } 333 }
332 334
333 SharedRendererState::InsideHardwareReleaseReset::InsideHardwareReleaseReset( 335 SharedRendererState::InsideHardwareReleaseReset::InsideHardwareReleaseReset(
334 SharedRendererState* shared_renderer_state) 336 SharedRendererState* shared_renderer_state)
335 : shared_renderer_state_(shared_renderer_state) { 337 : shared_renderer_state_(shared_renderer_state) {
336 DCHECK(!shared_renderer_state_->IsInsideHardwareRelease()); 338 DCHECK(!shared_renderer_state_->IsInsideHardwareRelease());
337 shared_renderer_state_->SetInsideHardwareRelease(true); 339 shared_renderer_state_->SetInsideHardwareRelease(true);
338 } 340 }
339 341
340 SharedRendererState::InsideHardwareReleaseReset::~InsideHardwareReleaseReset() { 342 SharedRendererState::InsideHardwareReleaseReset::~InsideHardwareReleaseReset() {
341 shared_renderer_state_->SetInsideHardwareRelease(false); 343 shared_renderer_state_->SetInsideHardwareRelease(false);
342 } 344 }
343 345
344 } // namespace android_webview 346 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698