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

Side by Side Diff: platform_tools/android/apps/sample_app/src/main/jni/com_skia_SkiaSampleRenderer.cpp

Issue 2117793002: Try fix the mac build bot after removing Android SampleApp (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Try fix the build bot Created 4 years, 5 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
(Empty)
1 /*
2 * Copyright 2011 Skia
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7 #include "com_skia_SkiaSampleRenderer.h"
8
9 #include "SampleApp.h"
10 #include "SkApplication.h"
11 #include "SkCanvas.h"
12 #include "SkDevice.h"
13 #include "SkEvent.h"
14 #include "SkWindow.h"
15
16 #include <jni.h>
17 #include "AndroidKeyToSkKey.h"
18
19
20 ///////////////////////////////////////////
21 ///////////////// Globals /////////////////
22 ///////////////////////////////////////////
23
24 struct ActivityGlue {
25 JNIEnv* m_env;
26 jweak m_obj;
27 jmethodID m_setTitle;
28 jmethodID m_setSlideList;
29 ActivityGlue() {
30 m_env = nullptr;
31 m_obj = nullptr;
32 m_setTitle = nullptr;
33 m_setSlideList = nullptr;
34 }
35 } gActivityGlue;
36
37 struct WindowGlue {
38 jweak m_obj;
39 jmethodID m_inval;
40 jmethodID m_queueSkEvent;
41 jmethodID m_startTimer;
42 jmethodID m_getMSAASampleCount;
43 WindowGlue() {
44 m_obj = nullptr;
45 m_inval = nullptr;
46 m_queueSkEvent = nullptr;
47 m_startTimer = nullptr;
48 m_getMSAASampleCount = nullptr;
49 }
50 } gWindowGlue;
51
52 SampleWindow* gWindow;
53
54 ///////////////////////////////////////////
55 ///////////// SkOSWindow impl /////////////
56 ///////////////////////////////////////////
57
58 SkOSWindow::SkOSWindow(void*) : fDestroyRequested(false) {
59 }
60
61 SkOSWindow::~SkOSWindow() {
62 }
63
64 bool SkOSWindow::attach(SkBackEndTypes /* attachType */, int /*msaaSampleCount*/ ,
65 bool /*deepColor*/, AttachmentInfo* info)
66 {
67 JNIEnv* env = gActivityGlue.m_env;
68 if (!env || !gWindowGlue.m_getMSAASampleCount || !gWindowGlue.m_obj) {
69 return false;
70 }
71 if (env->IsSameObject(gWindowGlue.m_obj, nullptr)) {
72 SkDebugf("ERROR: The JNI WeakRef to the Window is invalid");
73 return false;
74 }
75 info->fSampleCount = env->CallIntMethod(gWindowGlue.m_obj, gWindowGlue.m_get MSAASampleCount);
76
77 // This is the value requested in SkiaSampleView.java.
78 info->fStencilBits = 8;
79 return true;
80 }
81
82 void SkOSWindow::release() {
83 }
84
85 void SkOSWindow::present() {
86 }
87
88 void SkOSWindow::closeWindow() {
89 }
90
91 void SkOSWindow::setVsync(bool) {
92 }
93
94 void SkOSWindow::onSetTitle(const char title[])
95 {
96 JNIEnv* env = gActivityGlue.m_env;
97 if (!env) {
98 return;
99 }
100 if (env->IsSameObject(gActivityGlue.m_obj, nullptr)) {
101 SkDebugf("ERROR: The JNI WeakRef to the Activity is invalid");
102 return;
103 }
104
105 jstring string = env->NewStringUTF(title);
106 env->CallVoidMethod(gActivityGlue.m_obj, gActivityGlue.m_setTitle, string);
107 env->DeleteLocalRef(string);
108 }
109
110 void SkOSWindow::onHandleInval(const SkIRect& rect)
111 {
112 JNIEnv* env = gActivityGlue.m_env;
113 if (!env || !gWindowGlue.m_inval || !gWindowGlue.m_obj) {
114 return;
115 }
116 if (env->IsSameObject(gWindowGlue.m_obj, nullptr)) {
117 SkDebugf("ERROR: The JNI WeakRef to the Window is invalid");
118 return;
119 }
120 env->CallVoidMethod(gWindowGlue.m_obj, gWindowGlue.m_inval);
121 }
122
123 ///////////////////////////////////////////
124 /////////////// SkEvent impl //////////////
125 ///////////////////////////////////////////
126
127 void SkEvent::SignalQueueTimer(SkMSec ms)
128 {
129 JNIEnv* env = gActivityGlue.m_env;
130 if (!env || !gWindowGlue.m_startTimer || !gWindowGlue.m_obj || !ms) {
131 return;
132 }
133 if (env->IsSameObject(gWindowGlue.m_obj, nullptr)) {
134 SkDebugf("ERROR: The JNI WeakRef to the Window is invalid");
135 return;
136 }
137 env->CallVoidMethod(gWindowGlue.m_obj,
138 gWindowGlue.m_startTimer, ms);
139 }
140
141 void SkEvent::SignalNonEmptyQueue()
142 {
143 JNIEnv* env = gActivityGlue.m_env;
144 if (!env || !gWindowGlue.m_queueSkEvent || !gWindowGlue.m_obj) {
145 return;
146 }
147 if (env->IsSameObject(gWindowGlue.m_obj, nullptr)) {
148 SkDebugf("ERROR: The JNI WeakRef to the Window is invalid");
149 return;
150 }
151 env->CallVoidMethod(gWindowGlue.m_obj, gWindowGlue.m_queueSkEvent);
152 }
153
154 ///////////////////////////////////////////
155 ////////////////// JNI ////////////////////
156 ///////////////////////////////////////////
157
158 static jmethodID GetJMethod(JNIEnv* env, jclass clazz, const char name[],
159 const char signature[])
160 {
161 jmethodID m = env->GetMethodID(clazz, name, signature);
162 if (!m) SkDebugf("Could not find Java method %s\n", name);
163 return m;
164 }
165
166 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_init(JNIEnv* env,
167 jobject thiz, jobject jsampleActivity, jstring cmdLineFlags, jint msaaSa mpleCount)
168 {
169 // setup jni hooks to the java activity
170 gActivityGlue.m_env = env;
171 jclass clazz = env->FindClass("com/skia/SkiaSampleActivity");
172 gActivityGlue.m_obj = env->NewWeakGlobalRef(jsampleActivity);
173 gActivityGlue.m_setTitle = GetJMethod(env, clazz, "setTitle", "(Ljava/lang/C harSequence;)V");
174 gActivityGlue.m_setSlideList = GetJMethod(env, clazz, "setSlideList", "([Lja va/lang/String;)V");
175 env->DeleteLocalRef(clazz);
176
177 // setup jni hooks to the java renderer
178 clazz = env->FindClass("com/skia/SkiaSampleRenderer");
179 gWindowGlue.m_obj = env->NewWeakGlobalRef(thiz);
180 gWindowGlue.m_inval = GetJMethod(env, clazz, "requestRender", "()V");
181 gWindowGlue.m_queueSkEvent = GetJMethod(env, clazz, "queueSkEvent", "()V");
182 gWindowGlue.m_startTimer = GetJMethod(env, clazz, "startTimer", "(I)V");
183 gWindowGlue.m_getMSAASampleCount = GetJMethod(env, clazz, "getMSAASampleCoun t", "()I");
184 env->DeleteLocalRef(clazz);
185
186 application_init();
187
188 const char* flags = env->GetStringUTFChars(cmdLineFlags, JNI_FALSE);
189 SkTArray<SkString> flagEntries;
190 SkStrSplit(flags, " ", &flagEntries);
191
192 SkTArray<const char*> args;
193 args.push_back("SampleApp");
194 for (int i = 0; i < flagEntries.count(); i++) {
195 SkDebugf(flagEntries[i].c_str());
196 args.push_back(flagEntries[i].c_str());
197 }
198
199 SkString msaaSampleCountString;
200 if (msaaSampleCount > 0) {
201 args.push_back("--msaa");
202 msaaSampleCountString.appendS32(static_cast<uint32_t>(msaaSampleCount));
203 args.push_back(msaaSampleCountString.c_str());
204 }
205
206 if (gWindow) {
207 SkDebugf("The sample window already exists.");
208 } else {
209 gWindow = new SampleWindow(nullptr, args.count(), const_cast<char**>(arg s.begin()), nullptr);
210 }
211
212 // cleanup the command line flags
213 env->ReleaseStringUTFChars(cmdLineFlags, flags);
214
215 // send the list of slides up to the activity
216 const int slideCount = gWindow->sampleCount();
217 jobjectArray slideList = env->NewObjectArray(slideCount, env->FindClass("jav a/lang/String"), env->NewStringUTF(""));
218 for (int i = 0; i < slideCount; i++) {
219 jstring slideTitle = env->NewStringUTF(gWindow->getSampleTitle(i).c_str( ));
220 env->SetObjectArrayElement(slideList, i, slideTitle);
221 env->DeleteLocalRef(slideTitle);
222 }
223 env->CallVoidMethod(gActivityGlue.m_obj, gActivityGlue.m_setSlideList, slide List);
224 env->DeleteLocalRef(slideList);
225 }
226
227 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_term(JNIEnv* env,
228 jobject thiz)
229 {
230 delete gWindow;
231 gWindow = nullptr;
232 application_term();
233 if (gWindowGlue.m_obj) {
234 env->DeleteWeakGlobalRef(gWindowGlue.m_obj);
235 gWindowGlue.m_obj = nullptr;
236 }
237 if (gActivityGlue.m_obj) {
238 env->DeleteWeakGlobalRef(gActivityGlue.m_obj);
239 gActivityGlue.m_obj = nullptr;
240 }
241 }
242
243 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_draw(
244 JNIEnv* env, jobject thiz)
245 {
246 if (!gWindow) return;
247 gWindow->update(nullptr);
248 }
249
250 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_updateSize(JNIEnv* env,
251 jobject thiz, jint w, jint h)
252 {
253 gWindow->resize(w, h);
254 }
255
256 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_handleClick(JNIEnv* env,
257 jobject thiz, jint owner, jfloat x, jfloat y, jint jstate)
258 {
259 SkView::Click::State state;
260 switch(jstate) {
261 case 0: // MotionEvent.ACTION_DOWN
262 state = SkView::Click::kDown_State;
263 break;
264 case 1: // MotionEvent.ACTION_UP
265 case 3: // MotionEvent.ACTION_CANCEL
266 state = SkView::Click::kUp_State;
267 break;
268 case 2: // MotionEvent.ACTION_MOVE
269 state = SkView::Click::kMoved_State;
270 break;
271 default:
272 SkDebugf("motion event ignored\n");
273 return;
274 }
275 gWindow->handleClick(x, y, state, reinterpret_cast<void*>(owner));
276 }
277
278 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_nextSample(
279 JNIEnv* env, jobject thiz)
280 {
281 gWindow->nextSample();
282 }
283
284 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_previousSample(
285 JNIEnv* env, jobject thiz)
286 {
287 gWindow->previousSample();
288 }
289
290 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_goToSample(
291 JNIEnv* env, jobject thiz, jint position)
292 {
293 gWindow->goToSample(position);
294 }
295
296 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_toggleRenderingMode(
297 JNIEnv* env, jobject thiz)
298 {
299 gWindow->toggleRendering();
300 }
301
302 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_showOverview(
303 JNIEnv* env, jobject thiz)
304 {
305 gWindow->showOverview();
306 }
307
308 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_toggleSlideshow(
309 JNIEnv* env, jobject thiz)
310 {
311 gWindow->toggleSlideshow();
312 }
313
314 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_toggleFPS(
315 JNIEnv* env, jobject thiz)
316 {
317 gWindow->toggleFPS();
318 }
319
320 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_toggleTiling(
321 JNIEnv* env, jobject thiz)
322 {
323 gWindow->handleChar('t');
324 }
325
326 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_toggleBBox(
327 JNIEnv* env, jobject thiz)
328 {
329 gWindow->handleChar('b');
330 }
331
332 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_processSkEvent(
333 JNIEnv* env, jobject thiz)
334 {
335 if (SkEvent::ProcessEvent()) {
336 SkEvent::SignalNonEmptyQueue();
337 }
338 }
339
340 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_serviceQueueTimer(
341 JNIEnv* env, jobject thiz)
342 {
343 SkEvent::ServiceQueueTimer();
344 }
345
346 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_saveToPDF(
347 JNIEnv* env, jobject thiz)
348 {
349 gWindow->saveToPdf();
350 }
351
352 JNIEXPORT void JNICALL Java_com_skia_SkiaSampleRenderer_postInval(
353 JNIEnv* env, jobject thiz)
354 {
355 gWindow->postInvalDelay();
356 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698