OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |