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

Side by Side Diff: sky/shell/sky_view.cc

Issue 880443003: Plumb resize notifications around sky/shell (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: git cl format Created 5 years, 10 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "sky/shell/sky_view.h" 5 #include "sky/shell/sky_view.h"
6 6
7 #include <android/input.h> 7 #include <android/input.h>
8 #include <android/native_window_jni.h> 8 #include <android/native_window_jni.h>
9 9
10 #include "base/android/jni_android.h" 10 #include "base/android/jni_android.h"
11 #include "base/bind.h"
12 #include "base/location.h"
11 #include "jni/SkyView_jni.h" 13 #include "jni/SkyView_jni.h"
12 14
13 namespace sky { 15 namespace sky {
14 namespace shell { 16 namespace shell {
15 17
16 // static 18 // static
17 bool SkyView::Register(JNIEnv* env) { 19 bool SkyView::Register(JNIEnv* env) {
18 return RegisterNativesImpl(env); 20 return RegisterNativesImpl(env);
19 } 21 }
20 22
21 SkyView::Delegate::~Delegate() { 23 SkyView::SkyView(const Config& config) : config_(config), window_(nullptr) {
22 } 24 JNIEnv* env = base::android::AttachCurrentThread();
23 25 Java_SkyView_createForActivity(env, base::android::GetApplicationContext(),
24 SkyView::SkyView(Delegate* delegate) : delegate_(delegate), window_(NULL) { 26 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?
25 } 27 }
26 28
27 SkyView::~SkyView() { 29 SkyView::~SkyView() {
28 if (window_) 30 if (window_)
29 ReleaseWindow(); 31 ReleaseWindow();
30 } 32 }
31 33
32 void SkyView::Init() {
33 JNIEnv* env = base::android::AttachCurrentThread();
34 Java_SkyView_createForActivity(env, base::android::GetApplicationContext(),
35 reinterpret_cast<jlong>(this));
36 }
37
38 void SkyView::Destroy(JNIEnv* env, jobject obj) { 34 void SkyView::Destroy(JNIEnv* env, jobject obj) {
39 delegate_->OnDestroyed();
40 } 35 }
41 36
42 void SkyView::SurfaceCreated(JNIEnv* env, jobject obj, jobject jsurface) { 37 void SkyView::SurfaceCreated(JNIEnv* env, jobject obj, jobject jsurface) {
43 base::android::ScopedJavaLocalRef<jobject> protector(env, jsurface); 38 base::android::ScopedJavaLocalRef<jobject> protector(env, jsurface);
44 // Note: This ensures that any local references used by 39 // Note: This ensures that any local references used by
45 // ANativeWindow_fromSurface are released immediately. This is needed as a 40 // ANativeWindow_fromSurface are released immediately. This is needed as a
46 // workaround for https://code.google.com/p/android/issues/detail?id=68174 41 // workaround for https://code.google.com/p/android/issues/detail?id=68174
47 { 42 {
48 base::android::ScopedJavaLocalFrame scoped_local_reference_frame(env); 43 base::android::ScopedJavaLocalFrame scoped_local_reference_frame(env);
49 window_ = ANativeWindow_fromSurface(env, jsurface); 44 window_ = ANativeWindow_fromSurface(env, jsurface);
50 } 45 }
51 delegate_->OnAcceleratedWidgetAvailable(window_); 46 config_.gpu_task_runner->PostTask(
47 FROM_HERE, base::Bind(&GPUDelegate::OnAcceleratedWidgetAvailable,
48 config_.gpu_delegate, window_));
52 } 49 }
53 50
54 void SkyView::SurfaceDestroyed(JNIEnv* env, jobject obj) { 51 void SkyView::SurfaceDestroyed(JNIEnv* env, jobject obj) {
55 DCHECK(window_); 52 DCHECK(window_);
53 config_.gpu_task_runner->PostTask(
54 FROM_HERE, base::Bind(&GPUDelegate::OnDestroyed, config_.gpu_delegate));
56 ReleaseWindow(); 55 ReleaseWindow();
57 } 56 }
58 57
59 void SkyView::SurfaceSetSize(JNIEnv* env, 58 void SkyView::SurfaceSetSize(JNIEnv* env,
60 jobject obj, 59 jobject obj,
61 jint width, 60 jint width,
62 jint height, 61 jint height,
63 jfloat density) { 62 jfloat density) {
63 config_.ui_task_runner->PostTask(
64 FROM_HERE,
65 base::Bind(&UIDelegate::OnViewportMetricsChanged, config_.ui_delegate,
66 gfx::Size(width, height), density));
64 } 67 }
65 68
66 void SkyView::ReleaseWindow() { 69 void SkyView::ReleaseWindow() {
67 ANativeWindow_release(window_); 70 ANativeWindow_release(window_);
68 window_ = NULL; 71 window_ = nullptr;
69 } 72 }
70 73
71 } // namespace shell 74 } // namespace shell
72 } // namespace sky 75 } // namespace sky
OLDNEW
« sky/shell/sky_view.h ('K') | « sky/shell/sky_view.h ('k') | sky/shell/ui/engine.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698