diff options
author | Winson Chung <winsonc@google.com> | 2013-02-11 15:04:55 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-02-11 15:04:55 -0800 |
commit | ea8d24b040e103746935cb3161e383d5de5ceba7 (patch) | |
tree | bb00f080027de194e4ffc08b26eda052cba07ce0 /packages | |
parent | f7ad0a1e782deb81f3549a02e4e0fc13a2c6e93f (diff) | |
parent | e63fb8f1f92bcae3be2bcb6d521b351dda0f0ae2 (diff) | |
download | frameworks_base-ea8d24b040e103746935cb3161e383d5de5ceba7.zip frameworks_base-ea8d24b040e103746935cb3161e383d5de5ceba7.tar.gz frameworks_base-ea8d24b040e103746935cb3161e383d5de5ceba7.tar.bz2 |
am e63fb8f1: Merge "Manually recycling bitmap memory when rotating ss, resetting canvas bitmap, adding logging. (Bug 7974275)"
# Via Android (Google) Code Review (1) and Winson Chung (1)
* commit 'e63fb8f1f92bcae3be2bcb6d521b351dda0f0ae2':
Manually recycling bitmap memory when rotating ss, resetting canvas bitmap, adding logging. (Bug 7974275)
Diffstat (limited to 'packages')
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java | 32 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java | 4 |
2 files changed, 36 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java index 280b368..ddfaad5 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java @@ -45,6 +45,7 @@ import android.os.Environment; import android.os.Process; import android.provider.MediaStore; import android.util.DisplayMetrics; +import android.util.Log; import android.view.Display; import android.view.LayoutInflater; import android.view.MotionEvent; @@ -86,6 +87,8 @@ class SaveImageInBackgroundData { */ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Void, SaveImageInBackgroundData> { + private static final String TAG = "SaveImageInBackgroundTask"; + private static final String SCREENSHOTS_DIR_NAME = "Screenshots"; private static final String SCREENSHOT_FILE_NAME_TEMPLATE = "Screenshot_%s.png"; private static final String SCREENSHOT_SHARE_SUBJECT_TEMPLATE = "Screenshot (%s)"; @@ -138,6 +141,7 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi (shortSide - mImageHeight) / 2); c.drawBitmap(data.image, matrix, paint); c.drawColor(0x40FFFFFF); + c.setBitmap(null); Bitmap croppedIcon = Bitmap.createScaledBitmap(preview, iconSize, iconSize, true); @@ -167,6 +171,8 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi mNotificationBuilder.setLargeIcon(croppedIcon); // But we still don't set it for the expanded view, allowing the smallIcon to show here. mNotificationStyle.bigLargeIcon(null); + + Log.d(TAG, "SaveImageInBackgroundTask constructor"); } @Override @@ -174,6 +180,7 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi if (params.length != 1) return null; if (isCancelled()) { params[0].clearImage(); + Log.d(TAG, "doInBackground cancelled"); return null; } @@ -238,6 +245,7 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi // mounted params[0].clearImage(); params[0].result = 1; + Log.d(TAG, "doInBackground failed"); } // Recycle the bitmap data @@ -245,6 +253,7 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi image.recycle(); } + Log.d(TAG, "doInBackground complete"); return params[0]; } @@ -253,6 +262,7 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi if (isCancelled()) { params.finisher.run(); params.clearImage(); + Log.d(TAG, "onPostExecute cancelled"); return; } @@ -280,6 +290,7 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi mNotificationManager.notify(mNotificationId, n); } params.finisher.run(); + Log.d(TAG, "onPostExecute complete"); } } @@ -290,6 +301,8 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi * type of gallery? */ class GlobalScreenshot { + private static final String TAG = "GlobalScreenshot"; + private static final int SCREENSHOT_NOTIFICATION_ID = 789; private static final int SCREENSHOT_FLASH_TO_PEAK_DURATION = 130; private static final int SCREENSHOT_DROP_IN_DURATION = 430; @@ -381,12 +394,15 @@ class GlobalScreenshot { // Setup the Camera shutter sound mCameraSound = new MediaActionSound(); mCameraSound.load(MediaActionSound.SHUTTER_CLICK); + + Log.d(TAG, "GlobalScreenshot constructor"); } /** * Creates a new worker thread and saves the screenshot to the media store. */ private void saveScreenshotInWorkerThread(Runnable finisher) { + Log.d(TAG, "saveScreenshotInWorkerThread"); SaveImageInBackgroundData data = new SaveImageInBackgroundData(); data.context = mContext; data.image = mScreenBitmap; @@ -394,6 +410,7 @@ class GlobalScreenshot { data.finisher = finisher; if (mSaveInBgTask != null) { mSaveInBgTask.cancel(false); + Log.d(TAG, "saveScreenshotInWorkerThread cancel"); } mSaveInBgTask = new SaveImageInBackgroundTask(mContext, data, mNotificationManager, SCREENSHOT_NOTIFICATION_ID).execute(data); @@ -418,6 +435,8 @@ class GlobalScreenshot { * Takes a screenshot of the current display and shows an animation. */ void takeScreenshot(Runnable finisher, boolean statusBarVisible, boolean navBarVisible) { + Log.d(TAG, "takeScreenshot"); + // We need to orient the screenshot correctly (and the Surface api seems to take screenshots // only in the natural orientation of the device :!) mDisplay.getRealMetrics(mDisplayMetrics); @@ -431,6 +450,8 @@ class GlobalScreenshot { mDisplayMatrix.mapPoints(dims); dims[0] = Math.abs(dims[0]); dims[1] = Math.abs(dims[1]); + + Log.d(TAG, "takeScreenshot requiresRotation"); } // Take the screenshot @@ -438,6 +459,7 @@ class GlobalScreenshot { if (mScreenBitmap == null) { notifyScreenshotError(mContext, mNotificationManager); finisher.run(); + Log.d(TAG, "takeScreenshot null bitmap"); return; } @@ -451,7 +473,10 @@ class GlobalScreenshot { c.translate(-dims[0] / 2, -dims[1] / 2); c.drawBitmap(mScreenBitmap, 0, 0, null); c.setBitmap(null); + // Recycle the previous bitmap + mScreenBitmap.recycle(); mScreenBitmap = ss; + Log.d(TAG, "takeScreenshot rotation bitmap created"); } // Optimizations @@ -461,6 +486,7 @@ class GlobalScreenshot { // Start the post-screenshot animation startAnimation(finisher, mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels, statusBarVisible, navBarVisible); + Log.d(TAG, "takeScreenshot startedAnimation"); } @@ -469,6 +495,7 @@ class GlobalScreenshot { */ private void startAnimation(final Runnable finisher, int w, int h, boolean statusBarVisible, boolean navBarVisible) { + Log.d(TAG, "startAnimation"); // Add the view for the animation mScreenshotView.setImageBitmap(mScreenBitmap); mScreenshotLayout.requestFocus(); @@ -477,9 +504,11 @@ class GlobalScreenshot { if (mScreenshotAnimation != null) { mScreenshotAnimation.end(); mScreenshotAnimation.removeAllListeners(); + Log.d(TAG, "startAnimation reset previous animations"); } mWindowManager.addView(mScreenshotLayout, mWindowLayoutParams); + Log.d(TAG, "startAnimation layout added to WM"); ValueAnimator screenshotDropInAnim = createScreenshotDropInAnimation(); ValueAnimator screenshotFadeOutAnim = createScreenshotDropOutAnimation(w, h, statusBarVisible, navBarVisible); @@ -495,6 +524,7 @@ class GlobalScreenshot { // Clear any references to the bitmap mScreenBitmap = null; mScreenshotView.setImageBitmap(null); + Log.d(TAG, "startAnimation onAnimationEnd"); } }); mScreenshotLayout.post(new Runnable() { @@ -506,6 +536,7 @@ class GlobalScreenshot { mScreenshotView.setLayerType(View.LAYER_TYPE_HARDWARE, null); mScreenshotView.buildLayer(); mScreenshotAnimation.start(); + Log.d(TAG, "startAnimation post runnable"); } }); } @@ -643,6 +674,7 @@ class GlobalScreenshot { } static void notifyScreenshotError(Context context, NotificationManager nManager) { + Log.d(TAG, "notifyScreenshotError"); Resources r = context.getResources(); // Clear all existing notification, compose the new notification and show it diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java index 456b5fa..1954af8 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java @@ -23,6 +23,7 @@ import android.os.IBinder; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; +import android.util.Log; public class TakeScreenshotService extends Service { private static final String TAG = "TakeScreenshotService"; @@ -37,12 +38,15 @@ public class TakeScreenshotService extends Service { final Messenger callback = msg.replyTo; if (mScreenshot == null) { mScreenshot = new GlobalScreenshot(TakeScreenshotService.this); + Log.d(TAG, "Global screenshot initialized"); } + Log.d(TAG, "Global screenshot captured"); mScreenshot.takeScreenshot(new Runnable() { @Override public void run() { Message reply = Message.obtain(null, 1); try { callback.send(reply); + Log.d(TAG, "Global screenshot completed"); } catch (RemoteException e) { } } |