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

Unified Diff: android_webview/native/aw_contents.cc

Issue 653173004: Part 2: WIP Refactor Webview graphics related code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « android_webview/native/aw_contents.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: android_webview/native/aw_contents.cc
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index 4bd68b78f36e9b75adc375c53483e595963252bf..b10eeba2e56eabc78a47c4cd4f1ec05e15f60dfa 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -11,7 +11,6 @@
#include "android_webview/browser/aw_resource_context.h"
#include "android_webview/browser/browser_view_renderer.h"
#include "android_webview/browser/deferred_gpu_command_service.h"
-#include "android_webview/browser/hardware_renderer.h"
#include "android_webview/browser/net_disk_cache_remover.h"
#include "android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.h"
#include "android_webview/browser/scoped_app_gl_state_restore.h"
@@ -264,7 +263,6 @@ void AwContents::SetAwAutofillClient(jobject client) {
AwContents::~AwContents() {
DCHECK_EQ(this, AwContents::FromWebContents(web_contents_.get()));
- DCHECK(!hardware_renderer_.get());
web_contents_->RemoveUserData(kAwContentsUserDataKey);
if (find_helper_.get())
find_helper_->SetListener(NULL);
@@ -340,65 +338,8 @@ jlong AwContents::GetAwDrawGLViewContext(JNIEnv* env, jobject obj) {
return reinterpret_cast<intptr_t>(this);
}
-// TODO(hush): move this function to SharedRendererState.
void AwContents::DrawGL(AwDrawGLInfo* draw_info) {
- if (draw_info->mode == AwDrawGLInfo::kModeSync) {
- if (hardware_renderer_)
- hardware_renderer_->CommitFrame();
- return;
- }
-
- {
- GLViewRendererManager* manager = GLViewRendererManager::GetInstance();
- base::AutoLock lock(render_thread_lock_);
- if (renderer_manager_key_ != manager->NullKey()) {
- manager->DidDrawGL(renderer_manager_key_);
- }
- }
-
- ScopedAppGLStateRestore state_restore(
- draw_info->mode == AwDrawGLInfo::kModeDraw
- ? ScopedAppGLStateRestore::MODE_DRAW
- : ScopedAppGLStateRestore::MODE_RESOURCE_MANAGEMENT);
- ScopedAllowGL allow_gl;
-
- if (draw_info->mode == AwDrawGLInfo::kModeProcessNoContext) {
- LOG(ERROR) << "Received unexpected kModeProcessNoContext";
- }
-
- // kModeProcessNoContext should never happen because we tear down hardware
- // in onTrimMemory. However that guarantee is maintained outside of chromium
- // code. Not notifying shared state in kModeProcessNoContext can lead to
- // immediate deadlock, which is slightly more catastrophic than leaks or
- // corruption.
- if (draw_info->mode == AwDrawGLInfo::kModeProcess ||
- draw_info->mode == AwDrawGLInfo::kModeProcessNoContext) {
- shared_renderer_state_->DidDrawGLProcess();
- }
-
- if (shared_renderer_state_->IsInsideHardwareRelease()) {
- hardware_renderer_.reset();
- // Flush the idle queue in tear down.
- DeferredGpuCommandService::GetInstance()->PerformAllIdleWork();
- return;
- }
-
- if (draw_info->mode != AwDrawGLInfo::kModeDraw) {
- if (draw_info->mode == AwDrawGLInfo::kModeProcess) {
- DeferredGpuCommandService::GetInstance()->PerformIdleWork(true);
- }
- return;
- }
-
- if (!hardware_renderer_) {
- hardware_renderer_.reset(new HardwareRenderer(shared_renderer_state_));
- hardware_renderer_->CommitFrame();
- }
-
- hardware_renderer_->DrawGL(state_restore.stencil_enabled(),
- state_restore.framebuffer_binding_ext(),
- draw_info);
- DeferredGpuCommandService::GetInstance()->PerformIdleWork(false);
+ shared_renderer_state_->DrawGL(draw_info);
}
namespace {
@@ -880,13 +821,7 @@ void AwContents::OnAttachedToWindow(JNIEnv* env, jobject obj, int w, int h) {
}
void AwContents::InitializeHardwareDrawIfNeeded() {
- GLViewRendererManager* manager = GLViewRendererManager::GetInstance();
-
- base::AutoLock lock(render_thread_lock_);
- if (renderer_manager_key_ == manager->NullKey()) {
- renderer_manager_key_ = manager->PushBack(shared_renderer_state_);
- DeferredGpuCommandService::SetInstance();
- }
+ shared_renderer_state_->InitializeHardwareDrawIfNeededOnUI();
}
void AwContents::OnDetachedFromWindow(JNIEnv* env, jobject obj) {
@@ -896,41 +831,14 @@ void AwContents::OnDetachedFromWindow(JNIEnv* env, jobject obj) {
}
void AwContents::ReleaseHardwareDrawIfNeeded() {
- InsideHardwareReleaseReset inside_reset(shared_renderer_state_);
+ shared_renderer_state_->ReleaseHardwareDrawIfNeededOnUI();
+}
+void AwContents::InvalidateOnFunctorDestroy() {
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
if (!obj.is_null())
Java_AwContents_invalidateOnFunctorDestroy(env, obj.obj());
-
- bool hardware_initialized = browser_view_renderer_.hardware_enabled();
- if (hardware_initialized) {
- bool draw_functor_succeeded = RequestDrawGL(true);
- if (!draw_functor_succeeded) {
- LOG(ERROR) << "Unable to free GL resources. Has the Window leaked?";
- // Calling release on wrong thread intentionally.
- AwDrawGLInfo info;
- info.mode = AwDrawGLInfo::kModeProcess;
- DrawGL(&info);
- }
- browser_view_renderer_.ReleaseHardware();
- }
- DCHECK(!hardware_renderer_);
-
- GLViewRendererManager* manager = GLViewRendererManager::GetInstance();
-
- {
- base::AutoLock lock(render_thread_lock_);
- if (renderer_manager_key_ != manager->NullKey()) {
- manager->Remove(renderer_manager_key_);
- renderer_manager_key_ = manager->NullKey();
- }
- }
-
- if (hardware_initialized) {
- // Flush any invoke functors that's caused by OnDetachedFromWindow.
- RequestDrawGL(true);
- }
}
base::android::ScopedJavaLocalRef<jbyteArray>
« no previous file with comments | « android_webview/native/aw_contents.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698