Chromium Code Reviews| Index: sky/shell/sky_view.cc |
| diff --git a/sky/shell/sky_view.cc b/sky/shell/sky_view.cc |
| index c7e6d2d06c74440f6a7a6bdb4e198b627bd1163e..905d1f1204f026e72944855b7d8b758281d5dea1 100644 |
| --- a/sky/shell/sky_view.cc |
| +++ b/sky/shell/sky_view.cc |
| @@ -8,6 +8,8 @@ |
| #include <android/native_window_jni.h> |
| #include "base/android/jni_android.h" |
| +#include "base/bind.h" |
| +#include "base/location.h" |
| #include "jni/SkyView_jni.h" |
| namespace sky { |
| @@ -18,10 +20,10 @@ bool SkyView::Register(JNIEnv* env) { |
| return RegisterNativesImpl(env); |
| } |
| -SkyView::Delegate::~Delegate() { |
| -} |
| - |
| -SkyView::SkyView(Delegate* delegate) : delegate_(delegate), window_(NULL) { |
| +SkyView::SkyView(const Config& config) : config_(config), window_(nullptr) { |
| + JNIEnv* env = base::android::AttachCurrentThread(); |
| + Java_SkyView_createForActivity(env, base::android::GetApplicationContext(), |
| + reinterpret_cast<jlong>(this)); |
|
eseidel
2015/02/05 05:57:28
Bleh. Really? Reinterpret-casting a pointer to a
abarth-chromium
2015/02/05 06:16:23
Yeah, that's how our JNI system works. It's super
eseidel
2015/02/05 07:06:44
And we don't have any helpers to hide the crazy?
|
| } |
| SkyView::~SkyView() { |
| @@ -29,14 +31,7 @@ SkyView::~SkyView() { |
| ReleaseWindow(); |
| } |
| -void SkyView::Init() { |
| - JNIEnv* env = base::android::AttachCurrentThread(); |
| - Java_SkyView_createForActivity(env, base::android::GetApplicationContext(), |
| - reinterpret_cast<jlong>(this)); |
| -} |
| - |
| void SkyView::Destroy(JNIEnv* env, jobject obj) { |
| - delegate_->OnDestroyed(); |
| } |
| void SkyView::SurfaceCreated(JNIEnv* env, jobject obj, jobject jsurface) { |
| @@ -48,11 +43,15 @@ void SkyView::SurfaceCreated(JNIEnv* env, jobject obj, jobject jsurface) { |
| base::android::ScopedJavaLocalFrame scoped_local_reference_frame(env); |
| window_ = ANativeWindow_fromSurface(env, jsurface); |
| } |
| - delegate_->OnAcceleratedWidgetAvailable(window_); |
| + config_.gpu_task_runner->PostTask( |
| + FROM_HERE, base::Bind(&GPUDelegate::OnAcceleratedWidgetAvailable, |
| + config_.gpu_delegate, window_)); |
| } |
| void SkyView::SurfaceDestroyed(JNIEnv* env, jobject obj) { |
| DCHECK(window_); |
| + config_.gpu_task_runner->PostTask( |
| + FROM_HERE, base::Bind(&GPUDelegate::OnDestroyed, config_.gpu_delegate)); |
| ReleaseWindow(); |
| } |
| @@ -61,11 +60,15 @@ void SkyView::SurfaceSetSize(JNIEnv* env, |
| jint width, |
| jint height, |
| jfloat density) { |
| + config_.ui_task_runner->PostTask( |
| + FROM_HERE, |
| + base::Bind(&UIDelegate::OnViewportMetricsChanged, config_.ui_delegate, |
| + gfx::Size(width, height), density)); |
| } |
| void SkyView::ReleaseWindow() { |
| ANativeWindow_release(window_); |
| - window_ = NULL; |
| + window_ = nullptr; |
| } |
| } // namespace shell |