Loading services/surfaceflinger/Android.mk +4 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ LOCAL_SRC_FILES:= \ Layer.cpp \ LayerBase.cpp \ LayerDim.cpp \ DdmConnection.cpp \ DisplayHardware/DisplayHardware.cpp \ DisplayHardware/DisplayHardwareBase.cpp \ DisplayHardware/HWComposer.cpp \ Loading Loading @@ -36,6 +37,9 @@ LOCAL_SHARED_LIBRARIES := \ libui \ libgui # this is only needed for DDMS debugging LOCAL_SHARED_LIBRARIES += libdvm libandroid_runtime LOCAL_C_INCLUDES := \ $(call include-path-for, corecg graphics) Loading services/surfaceflinger/DdmConnection.cpp 0 → 100644 +75 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include <android_runtime/AndroidRuntime.h> #include "jni.h" #include "DdmConnection.h" extern "C" jint Java_com_android_internal_util_WithFramework_registerNatives( JNIEnv* env, jclass clazz); namespace android { void DdmConnection::start(const char* name) { JavaVM* vm; JNIEnv* env; // start a VM JavaVMInitArgs args; JavaVMOption opt; opt.optionString = "-agentlib:jdwp=transport=dt_android_adb,suspend=n,server=y"; args.version = JNI_VERSION_1_4; args.options = &opt; args.nOptions = 1; args.ignoreUnrecognized = JNI_FALSE; if (JNI_CreateJavaVM(&vm, &env, &args) == 0) { jclass startClass; jmethodID startMeth; // register native code if (Java_com_android_internal_util_WithFramework_registerNatives(env, 0) == 0) { // set our name by calling DdmHandleAppName.setAppName() startClass = env->FindClass("android/ddm/DdmHandleAppName"); if (startClass) { startMeth = env->GetStaticMethodID(startClass, "setAppName", "(Ljava/lang/String;)V"); if (startMeth) { jstring str = env->NewStringUTF(name); env->CallStaticVoidMethod(startClass, startMeth, str); env->DeleteLocalRef(str); } } // initialize DDMS communication by calling // DdmRegister.registerHandlers() startClass = env->FindClass("android/ddm/DdmRegister"); if (startClass) { startMeth = env->GetStaticMethodID(startClass, "registerHandlers", "()V"); if (startMeth) { env->CallStaticVoidMethod(startClass, startMeth); } } } } } }; // namespace android services/surfaceflinger/DdmConnection.h 0 → 100644 +29 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_SF_DDM_CONNECTION #define ANDROID_SF_DDM_CONNECTION namespace android { class DdmConnection { public: static void start(const char* name); }; }; // namespace android #endif /* ANDROID_SF_DDM_CONNECTION */ services/surfaceflinger/SurfaceFlinger.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ #include "clz.h" #include "GLExtensions.h" #include "DdmConnection.h" #include "Layer.h" #include "LayerDim.h" #include "SurfaceFlinger.h" Loading Loading @@ -90,6 +91,7 @@ SurfaceFlinger::SurfaceFlinger() mFreezeDisplayTime(0), mDebugRegion(0), mDebugBackground(0), mDebugDDMS(0), mDebugDisableHWC(0), mDebugInSwapBuffers(0), mLastSwapBufferTime(0), Loading @@ -108,13 +110,22 @@ void SurfaceFlinger::init() // debugging stuff... char value[PROPERTY_VALUE_MAX]; property_get("debug.sf.showupdates", value, "0"); mDebugRegion = atoi(value); property_get("debug.sf.showbackground", value, "0"); mDebugBackground = atoi(value); property_get("debug.sf.ddms", value, "0"); mDebugDDMS = atoi(value); if (mDebugDDMS) { DdmConnection::start(getServiceName()); } LOGI_IF(mDebugRegion, "showupdates enabled"); LOGI_IF(mDebugBackground, "showbackground enabled"); LOGI_IF(mDebugDDMS, "DDMS debugging enabled"); } SurfaceFlinger::~SurfaceFlinger() Loading services/surfaceflinger/SurfaceFlinger.h +1 −0 Original line number Diff line number Diff line Loading @@ -371,6 +371,7 @@ private: // don't use a lock for these, we don't care int mDebugRegion; int mDebugBackground; int mDebugDDMS; int mDebugDisableHWC; volatile nsecs_t mDebugInSwapBuffers; nsecs_t mLastSwapBufferTime; Loading Loading
services/surfaceflinger/Android.mk +4 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ LOCAL_SRC_FILES:= \ Layer.cpp \ LayerBase.cpp \ LayerDim.cpp \ DdmConnection.cpp \ DisplayHardware/DisplayHardware.cpp \ DisplayHardware/DisplayHardwareBase.cpp \ DisplayHardware/HWComposer.cpp \ Loading Loading @@ -36,6 +37,9 @@ LOCAL_SHARED_LIBRARIES := \ libui \ libgui # this is only needed for DDMS debugging LOCAL_SHARED_LIBRARIES += libdvm libandroid_runtime LOCAL_C_INCLUDES := \ $(call include-path-for, corecg graphics) Loading
services/surfaceflinger/DdmConnection.cpp 0 → 100644 +75 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include <android_runtime/AndroidRuntime.h> #include "jni.h" #include "DdmConnection.h" extern "C" jint Java_com_android_internal_util_WithFramework_registerNatives( JNIEnv* env, jclass clazz); namespace android { void DdmConnection::start(const char* name) { JavaVM* vm; JNIEnv* env; // start a VM JavaVMInitArgs args; JavaVMOption opt; opt.optionString = "-agentlib:jdwp=transport=dt_android_adb,suspend=n,server=y"; args.version = JNI_VERSION_1_4; args.options = &opt; args.nOptions = 1; args.ignoreUnrecognized = JNI_FALSE; if (JNI_CreateJavaVM(&vm, &env, &args) == 0) { jclass startClass; jmethodID startMeth; // register native code if (Java_com_android_internal_util_WithFramework_registerNatives(env, 0) == 0) { // set our name by calling DdmHandleAppName.setAppName() startClass = env->FindClass("android/ddm/DdmHandleAppName"); if (startClass) { startMeth = env->GetStaticMethodID(startClass, "setAppName", "(Ljava/lang/String;)V"); if (startMeth) { jstring str = env->NewStringUTF(name); env->CallStaticVoidMethod(startClass, startMeth, str); env->DeleteLocalRef(str); } } // initialize DDMS communication by calling // DdmRegister.registerHandlers() startClass = env->FindClass("android/ddm/DdmRegister"); if (startClass) { startMeth = env->GetStaticMethodID(startClass, "registerHandlers", "()V"); if (startMeth) { env->CallStaticVoidMethod(startClass, startMeth); } } } } } }; // namespace android
services/surfaceflinger/DdmConnection.h 0 → 100644 +29 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_SF_DDM_CONNECTION #define ANDROID_SF_DDM_CONNECTION namespace android { class DdmConnection { public: static void start(const char* name); }; }; // namespace android #endif /* ANDROID_SF_DDM_CONNECTION */
services/surfaceflinger/SurfaceFlinger.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ #include "clz.h" #include "GLExtensions.h" #include "DdmConnection.h" #include "Layer.h" #include "LayerDim.h" #include "SurfaceFlinger.h" Loading Loading @@ -90,6 +91,7 @@ SurfaceFlinger::SurfaceFlinger() mFreezeDisplayTime(0), mDebugRegion(0), mDebugBackground(0), mDebugDDMS(0), mDebugDisableHWC(0), mDebugInSwapBuffers(0), mLastSwapBufferTime(0), Loading @@ -108,13 +110,22 @@ void SurfaceFlinger::init() // debugging stuff... char value[PROPERTY_VALUE_MAX]; property_get("debug.sf.showupdates", value, "0"); mDebugRegion = atoi(value); property_get("debug.sf.showbackground", value, "0"); mDebugBackground = atoi(value); property_get("debug.sf.ddms", value, "0"); mDebugDDMS = atoi(value); if (mDebugDDMS) { DdmConnection::start(getServiceName()); } LOGI_IF(mDebugRegion, "showupdates enabled"); LOGI_IF(mDebugBackground, "showbackground enabled"); LOGI_IF(mDebugDDMS, "DDMS debugging enabled"); } SurfaceFlinger::~SurfaceFlinger() Loading
services/surfaceflinger/SurfaceFlinger.h +1 −0 Original line number Diff line number Diff line Loading @@ -371,6 +371,7 @@ private: // don't use a lock for these, we don't care int mDebugRegion; int mDebugBackground; int mDebugDDMS; int mDebugDisableHWC; volatile nsecs_t mDebugInSwapBuffers; nsecs_t mLastSwapBufferTime; Loading