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

Side by Side Diff: android_webview/native/aw_gl_functor.cc

Issue 1914433002: Assert that AwGLFunctor instances do not leak. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 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
« no previous file with comments | « android_webview/javatests/src/org/chromium/android_webview/test/AwContentsGarbageCollectionTest.java ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/native/aw_gl_functor.h" 5 #include "android_webview/native/aw_gl_functor.h"
6 6
7 #include "android_webview/public/browser/draw_gl.h" 7 #include "android_webview/public/browser/draw_gl.h"
8 #include "content/public/browser/browser_thread.h" 8 #include "content/public/browser/browser_thread.h"
9 #include "jni/AwGLFunctor_jni.h" 9 #include "jni/AwGLFunctor_jni.h"
10 10
11 using base::android::AttachCurrentThread; 11 using base::android::AttachCurrentThread;
12 using content::BrowserThread; 12 using content::BrowserThread;
13 13
14 extern "C" { 14 extern "C" {
15 static AwDrawGLFunction DrawGLFunction; 15 static AwDrawGLFunction DrawGLFunction;
16 static void DrawGLFunction(long view_context, 16 static void DrawGLFunction(long view_context,
17 AwDrawGLInfo* draw_info, 17 AwDrawGLInfo* draw_info,
18 void* spare) { 18 void* spare) {
19 // |view_context| is the value that was returned from the java 19 // |view_context| is the value that was returned from the java
20 // AwContents.onPrepareDrawGL; this cast must match the code there. 20 // AwContents.onPrepareDrawGL; this cast must match the code there.
21 reinterpret_cast<android_webview::RenderThreadManager*>(view_context) 21 reinterpret_cast<android_webview::RenderThreadManager*>(view_context)
22 ->DrawGL(draw_info); 22 ->DrawGL(draw_info);
23 } 23 }
24 } 24 }
25 25
26 namespace android_webview { 26 namespace android_webview {
27 27
28 namespace {
29 int g_instance_count = 0;
30 }
31
28 AwGLFunctor::AwGLFunctor(const JavaObjectWeakGlobalRef& java_ref) 32 AwGLFunctor::AwGLFunctor(const JavaObjectWeakGlobalRef& java_ref)
29 : java_ref_(java_ref), 33 : java_ref_(java_ref),
30 render_thread_manager_( 34 render_thread_manager_(
31 this, 35 this,
32 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)) {} 36 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)) {
37 DCHECK_CURRENTLY_ON(BrowserThread::UI);
38 ++g_instance_count;
39 }
33 40
34 AwGLFunctor::~AwGLFunctor() {} 41 AwGLFunctor::~AwGLFunctor() {
42 DCHECK_CURRENTLY_ON(BrowserThread::UI);
43 --g_instance_count;
44 }
35 45
36 bool AwGLFunctor::RequestInvokeGL(bool wait_for_completion) { 46 bool AwGLFunctor::RequestInvokeGL(bool wait_for_completion) {
37 DCHECK_CURRENTLY_ON(BrowserThread::UI); 47 DCHECK_CURRENTLY_ON(BrowserThread::UI);
38 JNIEnv* env = AttachCurrentThread(); 48 JNIEnv* env = AttachCurrentThread();
39 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 49 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
40 if (obj.is_null()) 50 if (obj.is_null())
41 return false; 51 return false;
42 return Java_AwGLFunctor_requestInvokeGL(env, obj.obj(), wait_for_completion); 52 return Java_AwGLFunctor_requestInvokeGL(env, obj.obj(), wait_for_completion);
43 } 53 }
44 54
45 void AwGLFunctor::DetachFunctorFromView() { 55 void AwGLFunctor::DetachFunctorFromView() {
46 DCHECK_CURRENTLY_ON(BrowserThread::UI); 56 DCHECK_CURRENTLY_ON(BrowserThread::UI);
47 JNIEnv* env = AttachCurrentThread(); 57 JNIEnv* env = AttachCurrentThread();
48 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 58 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
49 if (!obj.is_null()) 59 if (!obj.is_null())
50 Java_AwGLFunctor_detachFunctorFromView(env, obj.obj()); 60 Java_AwGLFunctor_detachFunctorFromView(env, obj.obj());
51 } 61 }
52 62
53 void AwGLFunctor::Destroy(JNIEnv* env, 63 void AwGLFunctor::Destroy(JNIEnv* env,
54 const base::android::JavaParamRef<jobject>& obj) { 64 const base::android::JavaParamRef<jobject>& obj) {
65 DCHECK_CURRENTLY_ON(BrowserThread::UI);
55 java_ref_.reset(); 66 java_ref_.reset();
56 delete this; 67 delete this;
57 } 68 }
58 69
59 void AwGLFunctor::DeleteHardwareRenderer( 70 void AwGLFunctor::DeleteHardwareRenderer(
60 JNIEnv* env, 71 JNIEnv* env,
61 const base::android::JavaParamRef<jobject>& obj) { 72 const base::android::JavaParamRef<jobject>& obj) {
73 DCHECK_CURRENTLY_ON(BrowserThread::UI);
62 render_thread_manager_.DeleteHardwareRendererOnUI(); 74 render_thread_manager_.DeleteHardwareRendererOnUI();
63 } 75 }
64 76
65 jlong AwGLFunctor::GetAwDrawGLViewContext( 77 jlong AwGLFunctor::GetAwDrawGLViewContext(
66 JNIEnv* env, 78 JNIEnv* env,
67 const base::android::JavaParamRef<jobject>& obj) { 79 const base::android::JavaParamRef<jobject>& obj) {
80 DCHECK_CURRENTLY_ON(BrowserThread::UI);
68 return reinterpret_cast<intptr_t>(&render_thread_manager_); 81 return reinterpret_cast<intptr_t>(&render_thread_manager_);
69 } 82 }
70 83
84 static jint GetNativeInstanceCount(JNIEnv* env, const JavaParamRef<jclass>&) {
85 DCHECK_CURRENTLY_ON(BrowserThread::UI);
86 return g_instance_count;
87 }
88
71 static jlong GetAwDrawGLFunction(JNIEnv* env, const JavaParamRef<jclass>&) { 89 static jlong GetAwDrawGLFunction(JNIEnv* env, const JavaParamRef<jclass>&) {
90 DCHECK_CURRENTLY_ON(BrowserThread::UI);
72 return reinterpret_cast<intptr_t>(&DrawGLFunction); 91 return reinterpret_cast<intptr_t>(&DrawGLFunction);
73 } 92 }
74 93
75 static jlong Create(JNIEnv* env, 94 static jlong Create(JNIEnv* env,
76 const JavaParamRef<jclass>&, 95 const JavaParamRef<jclass>&,
77 const base::android::JavaParamRef<jobject>& obj) { 96 const base::android::JavaParamRef<jobject>& obj) {
97 DCHECK_CURRENTLY_ON(BrowserThread::UI);
78 return reinterpret_cast<intptr_t>( 98 return reinterpret_cast<intptr_t>(
79 new AwGLFunctor(JavaObjectWeakGlobalRef(env, obj))); 99 new AwGLFunctor(JavaObjectWeakGlobalRef(env, obj)));
80 } 100 }
81 101
82 bool RegisterAwGLFunctor(JNIEnv* env) { 102 bool RegisterAwGLFunctor(JNIEnv* env) {
103 DCHECK_CURRENTLY_ON(BrowserThread::UI);
83 return RegisterNativesImpl(env); 104 return RegisterNativesImpl(env);
84 } 105 }
85 106
86 } // namespace android_webview 107 } // namespace android_webview
OLDNEW
« no previous file with comments | « android_webview/javatests/src/org/chromium/android_webview/test/AwContentsGarbageCollectionTest.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698