android_view_SurfaceSession.cpp revision a3850d8f8fc096a7195d34f05f45a4e29926e36c
154362a6e2208117b98db169af9e03c082175af38Heidi Miller/*
254362a6e2208117b98db169af9e03c082175af38Heidi Miller * Copyright (C) 2012 The Android Open Source Project
354362a6e2208117b98db169af9e03c082175af38Heidi Miller *
454362a6e2208117b98db169af9e03c082175af38Heidi Miller * Licensed under the Apache License, Version 2.0 (the "License");
554362a6e2208117b98db169af9e03c082175af38Heidi Miller * you may not use this file except in compliance with the License.
654362a6e2208117b98db169af9e03c082175af38Heidi Miller * You may obtain a copy of the License at
754362a6e2208117b98db169af9e03c082175af38Heidi Miller *
854362a6e2208117b98db169af9e03c082175af38Heidi Miller *      http://www.apache.org/licenses/LICENSE-2.0
954362a6e2208117b98db169af9e03c082175af38Heidi Miller *
1054362a6e2208117b98db169af9e03c082175af38Heidi Miller * Unless required by applicable law or agreed to in writing, software
1154362a6e2208117b98db169af9e03c082175af38Heidi Miller * distributed under the License is distributed on an "AS IS" BASIS,
12n����R� * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1354362a6e2208117b98db169af9e03c082175af38Heidi Miller * See the License for the specific language governing permissions and
1454362a6e2208117b98db169af9e03c082175af38Heidi Miller * limitations under the License.
1554362a6e2208117b98db169af9e03c082175af38Heidi Miller */
1654362a6e2208117b98db169af9e03c082175af38Heidi Miller
1754362a6e2208117b98db169af9e03c082175af38Heidi Miller#define LOG_TAG "SurfaceSession"
1854362a6e2208117b98db169af9e03c082175af38Heidi Miller
1954362a6e2208117b98db169af9e03c082175af38Heidi Miller#include "JNIHelp.h"
2054362a6e2208117b98db169af9e03c082175af38Heidi Miller
2154362a6e2208117b98db169af9e03c082175af38Heidi Miller#include <android_runtime/AndroidRuntime.h>
2254362a6e2208117b98db169af9e03c082175af38Heidi Miller#include <android_runtime/android_view_SurfaceSession.h>
2354362a6e2208117b98db169af9e03c082175af38Heidi Miller#include <utils/Log.h>
2454362a6e2208117b98db169af9e03c082175af38Heidi Miller#include <utils/RefBase.h>
2554362a6e2208117b98db169af9e03c082175af38Heidi Miller
2654362a6e2208117b98db169af9e03c082175af38Heidi Miller#include <gui/SurfaceComposerClient.h>
27d_
2854362a6e2208117b98db169af9e03c082175af38Heidi Millernamespace android {
29T��M��>���gT�
30A���static struct {
31m����_��ʠ���jZ���� �    jfieldID mNativeClient;
32P�n��]���/H:���bo} gSurfaceSessionClassInfo;
3354362a6e2208117b98db169af9e03c082175af38Heidi Miller
3454362a6e2208117b98db169af9e03c082175af38Heidi Miller
35E�r�ˑ��wP����EX@���U��s��BYsp<SurfaceComposerClient> android_view_SurfaceSession_getClient(
367s�}"�g��U        JNIEnv* env, jobject surfaceSessionObj) {
3754362a6e2208117b98db169af9e03c082175af38Heidi Miller    return reinterpret_cast<SurfaceComposerClient*>(
3854362a6e2208117b98db169af9e03c082175af38Heidi Miller            env->GetLongField(surfaceSessionObj, gSurfaceSessionClassInfo.mNativeClient));
3954362a6e2208117b98db169af9e03c082175af38Heidi Miller}
4054362a6e2208117b98db169af9e03c082175af38Heidi Miller
4154362a6e2208117b98db169af9e03c082175af38Heidi Miller
42y-=static jlong nativeCreate(JNIEnv* env, jclass clazz) {
43I�h�w�������    SurfaceComposerClient* client = new SurfaceComposerClient();
4454362a6e2208117b98db169af9e03c082175af38Heidi Miller    client->incStrong((void*)nativeCreate);
4554362a6e2208117b98db169af9e03c082175af38Heidi Miller    return reinterpret_cast<jlong>(client);
46z��g}
4754362a6e2208117b98db169af9e03c082175af38Heidi Miller
4854362a6e2208117b98db169af9e03c082175af38Heidi Millerstatic void nativeDestroy(JNIEnv* env, jclass clazz, jlong ptr) {
4954362a6e2208117b98db169af9e03c082175af38Heidi Miller    SurfaceComposerClient* client = reinterpret_cast<SurfaceComposerClient*>(ptr);
5054362a6e2208117b98db169af9e03c082175af38Heidi Miller    client->decStrong((void*)nativeCreate);
51u�����׻$��}
52Dۂ�(
5354362a6e2208117b98db169af9e03c082175af38Heidi Millerstatic void nativeKill(JNIEnv* env, jclass clazz, jlong ptr) {
54s    SurfaceComposerClient* client = reinterpret_cast<SurfaceComposerClient*>(ptr);
5554362a6e2208117b98db169af9e03c082175af38Heidi Miller    client->dispose();
56M�h�H�}yy�***�PmPeee*#��}
5754362a6e2208117b98db169af9e03c082175af38Heidi Miller
58Ze�e-[f�X]�}��H
5954362a6e2208117b98db169af9e03c082175af38Heidi Millerstatic JNINativeMethod gMethods[] = {
6054362a6e2208117b98db169af9e03c082175af38Heidi Miller    /* name, signature, funcPtr */
6154362a6e2208117b98db169af9e03c082175af38Heidi Miller    { "nativeCreate", "()J",
62U�$������&��n�ĉ�C�            (void*)nativeCreate },
6354362a6e2208117b98db169af9e03c082175af38Heidi Miller    { "nativeDestroy", "(J)V",
6454362a6e2208117b98db169af9e03c082175af38Heidi Miller            (void*)nativeDestroy },
6554362a6e2208117b98db169af9e03c082175af38Heidi Miller    { "nativeKill", "(J)V",
661b��?��OvQ��R{Ӣ�HL            (void*)nativeKill }
6754362a6e2208117b98db169af9e03c082175af38Heidi Miller};
6854362a6e2208117b98db169af9e03c082175af38Heidi Miller
6954362a6e2208117b98db169af9e03c082175af38Heidi Millerint register_android_view_SurfaceSession(JNIEnv* env) {
7054362a6e2208117b98db169af9e03c082175af38Heidi Miller    int res = jniRegisterNativeMethods(env, "android/view/SurfaceSession",
7154362a6e2208117b98db169af9e03c082175af38Heidi Miller            gMethods, NELEM(gMethods));
7254362a6e2208117b98db169af9e03c082175af38Heidi Miller    LOG_ALWAYS_FATAL_IF(res < 0, "Unable to register native methods.");
7354362a6e2208117b98db169af9e03c082175af38Heidi Miller
74uӷ�z󘳛�L�)D�F    jclass clazz = env->FindClass("android/view/SurfaceSession");
7554362a6e2208117b98db169af9e03c082175af38Heidi Miller    gSurfaceSessionClassInfo.mNativeClient = env->GetFieldID(clazz, "mNativeClient", "J");
7654362a6e2208117b98db169af9e03c082175af38Heidi Miller    return 0;
7754362a6e2208117b98db169af9e03c082175af38Heidi Miller}
7854362a6e2208117b98db169af9e03c082175af38Heidi Miller
7954362a6e2208117b98db169af9e03c082175af38Heidi Miller} // namespace android
8054362a6e2208117b98db169af9e03c082175af38Heidi Miller