OLD | NEW |
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/browser/browser_view_renderer.h" | |
8 #include "android_webview/public/browser/draw_gl.h" | 7 #include "android_webview/public/browser/draw_gl.h" |
9 #include "content/public/browser/browser_thread.h" | 8 #include "content/public/browser/browser_thread.h" |
10 #include "jni/AwGLFunctor_jni.h" | 9 #include "jni/AwGLFunctor_jni.h" |
11 | 10 |
12 using base::android::AttachCurrentThread; | 11 using base::android::AttachCurrentThread; |
13 using content::BrowserThread; | 12 using content::BrowserThread; |
14 | 13 |
15 extern "C" { | 14 extern "C" { |
16 static AwDrawGLFunction DrawGLFunction; | 15 static AwDrawGLFunction DrawGLFunction; |
17 static void DrawGLFunction(long view_context, | 16 static void DrawGLFunction(long view_context, |
18 AwDrawGLInfo* draw_info, | 17 AwDrawGLInfo* draw_info, |
19 void* spare) { | 18 void* spare) { |
20 // |view_context| is the value that was returned from the java | 19 // |view_context| is the value that was returned from the java |
21 // AwContents.onPrepareDrawGL; this cast must match the code there. | 20 // AwContents.onPrepareDrawGL; this cast must match the code there. |
22 reinterpret_cast<android_webview::RenderThreadManager*>(view_context) | 21 reinterpret_cast<android_webview::RenderThreadManager*>(view_context) |
23 ->DrawGL(draw_info); | 22 ->DrawGL(draw_info); |
24 } | 23 } |
25 } | 24 } |
26 | 25 |
27 namespace android_webview { | 26 namespace android_webview { |
28 | 27 |
29 AwGLFunctor::AwGLFunctor(const JavaObjectWeakGlobalRef& java_ref) | 28 AwGLFunctor::AwGLFunctor(const JavaObjectWeakGlobalRef& java_ref) |
30 : java_ref_(java_ref), | 29 : java_ref_(java_ref), |
31 render_thread_manager_( | 30 render_thread_manager_( |
32 this, | 31 this, |
33 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), | 32 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)) {} |
34 browser_view_renderer_(nullptr) {} | |
35 | 33 |
36 AwGLFunctor::~AwGLFunctor() {} | 34 AwGLFunctor::~AwGLFunctor() {} |
37 | 35 |
38 void AwGLFunctor::OnParentDrawConstraintsUpdated() { | |
39 DCHECK_CURRENTLY_ON(BrowserThread::UI); | |
40 if (browser_view_renderer_) | |
41 browser_view_renderer_->OnParentDrawConstraintsUpdated(); | |
42 } | |
43 | |
44 bool AwGLFunctor::RequestInvokeGL(bool wait_for_completion) { | 36 bool AwGLFunctor::RequestInvokeGL(bool wait_for_completion) { |
45 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 37 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
46 JNIEnv* env = AttachCurrentThread(); | 38 JNIEnv* env = AttachCurrentThread(); |
47 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 39 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
48 if (obj.is_null()) | 40 if (obj.is_null()) |
49 return false; | 41 return false; |
50 return Java_AwGLFunctor_requestInvokeGL(env, obj.obj(), wait_for_completion); | 42 return Java_AwGLFunctor_requestInvokeGL(env, obj.obj(), wait_for_completion); |
51 } | 43 } |
52 | 44 |
53 void AwGLFunctor::DetachFunctorFromView() { | 45 void AwGLFunctor::DetachFunctorFromView() { |
54 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 46 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
55 JNIEnv* env = AttachCurrentThread(); | 47 JNIEnv* env = AttachCurrentThread(); |
56 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 48 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
57 if (!obj.is_null()) | 49 if (!obj.is_null()) |
58 Java_AwGLFunctor_detachFunctorFromView(env, obj.obj()); | 50 Java_AwGLFunctor_detachFunctorFromView(env, obj.obj()); |
59 } | 51 } |
60 | 52 |
61 void AwGLFunctor::SetBrowserViewRenderer( | |
62 BrowserViewRenderer* browser_view_renderer) { | |
63 DCHECK_CURRENTLY_ON(BrowserThread::UI); | |
64 browser_view_renderer_ = browser_view_renderer; | |
65 } | |
66 | |
67 void AwGLFunctor::Destroy(JNIEnv* env, | 53 void AwGLFunctor::Destroy(JNIEnv* env, |
68 const base::android::JavaParamRef<jobject>& obj) { | 54 const base::android::JavaParamRef<jobject>& obj) { |
69 java_ref_.reset(); | 55 java_ref_.reset(); |
70 delete this; | 56 delete this; |
71 } | 57 } |
72 | 58 |
73 void AwGLFunctor::DeleteHardwareRenderer( | 59 void AwGLFunctor::DeleteHardwareRenderer( |
74 JNIEnv* env, | 60 JNIEnv* env, |
75 const base::android::JavaParamRef<jobject>& obj) { | 61 const base::android::JavaParamRef<jobject>& obj) { |
76 render_thread_manager_.DeleteHardwareRendererOnUI(); | 62 render_thread_manager_.DeleteHardwareRendererOnUI(); |
(...skipping 14 matching lines...) Expand all Loading... |
91 const base::android::JavaParamRef<jobject>& obj) { | 77 const base::android::JavaParamRef<jobject>& obj) { |
92 return reinterpret_cast<intptr_t>( | 78 return reinterpret_cast<intptr_t>( |
93 new AwGLFunctor(JavaObjectWeakGlobalRef(env, obj))); | 79 new AwGLFunctor(JavaObjectWeakGlobalRef(env, obj))); |
94 } | 80 } |
95 | 81 |
96 bool RegisterAwGLFunctor(JNIEnv* env) { | 82 bool RegisterAwGLFunctor(JNIEnv* env) { |
97 return RegisterNativesImpl(env); | 83 return RegisterNativesImpl(env); |
98 } | 84 } |
99 | 85 |
100 } // namespace android_webview | 86 } // namespace android_webview |
OLD | NEW |