Merge "Add StrictMode.noteSlowCall to calls that result in hw bitmap readback" into oc-dev

am: 01a5cc9004

Change-Id: I52ea2290a175df2dcd5b3805f7e5943e387133da
This commit is contained in:
Sergey Vasilinets
2017-05-05 19:51:04 +00:00
committed by android-build-merger
2 changed files with 17 additions and 1 deletions

View File

@@ -23,6 +23,7 @@ import android.annotation.Nullable;
import android.annotation.Size;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.StrictMode;
import android.os.Trace;
import android.util.DisplayMetrics;
import android.util.Log;
@@ -600,6 +601,13 @@ public final class Bitmap implements Parcelable {
src.position(position);
}
private void noteHardwareBitmapSlowCall() {
if (getConfig() == Config.HARDWARE) {
StrictMode.noteSlowCall("Warning: attempt to read pixels from hardware "
+ "bitmap, which is very slow operation");
}
}
/**
* Tries to make a new bitmap based on the dimensions of this bitmap,
* setting the new bitmap's config to the one specified, and then copying
@@ -618,6 +626,7 @@ public final class Bitmap implements Parcelable {
if (config == Config.HARDWARE && isMutable) {
throw new IllegalArgumentException("Hardware bitmaps are always immutable");
}
noteHardwareBitmapSlowCall();
Bitmap b = nativeCopy(mNativePtr, config.nativeInt, isMutable);
if (b != null) {
b.setPremultiplied(mRequestPremultiplied);
@@ -635,6 +644,7 @@ public final class Bitmap implements Parcelable {
*/
public Bitmap createAshmemBitmap() {
checkRecycled("Can't copy a recycled bitmap");
noteHardwareBitmapSlowCall();
Bitmap b = nativeCopyAshmem(mNativePtr);
if (b != null) {
b.setPremultiplied(mRequestPremultiplied);
@@ -652,6 +662,7 @@ public final class Bitmap implements Parcelable {
*/
public Bitmap createAshmemBitmap(Config config) {
checkRecycled("Can't copy a recycled bitmap");
noteHardwareBitmapSlowCall();
Bitmap b = nativeCopyAshmemConfig(mNativePtr, config.nativeInt);
if (b != null) {
b.setPremultiplied(mRequestPremultiplied);
@@ -772,6 +783,7 @@ public final class Bitmap implements Parcelable {
boolean isHardware = source.getConfig() == Config.HARDWARE;
if (isHardware) {
source.noteHardwareBitmapSlowCall();
source = nativeCopyPreserveInternalConfig(source.mNativePtr);
}
@@ -1218,6 +1230,7 @@ public final class Bitmap implements Parcelable {
if (quality < 0 || quality > 100) {
throw new IllegalArgumentException("quality must be 0..100");
}
StrictMode.noteSlowCall("Compression of a bitmap is slow");
Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, "Bitmap.compress");
boolean result = nativeCompress(mNativePtr, format.nativeInt,
quality, stream, new byte[WORKING_COMPRESS_STORAGE]);
@@ -1792,6 +1805,7 @@ public final class Bitmap implements Parcelable {
*/
public void writeToParcel(Parcel p, int flags) {
checkRecycled("Can't parcel a recycled bitmap");
noteHardwareBitmapSlowCall();
if (!nativeWriteToParcel(mNativePtr, mIsMutable, mDensity, p)) {
throw new RuntimeException("native writeToParcel failed");
}
@@ -1838,6 +1852,7 @@ public final class Bitmap implements Parcelable {
public Bitmap extractAlpha(Paint paint, int[] offsetXY) {
checkRecycled("Can't extractAlpha on a recycled bitmap");
long nativePaint = paint != null ? paint.getNativeInstance() : 0;
noteHardwareBitmapSlowCall();
Bitmap bm = nativeExtractAlpha(mNativePtr, nativePaint, offsetXY);
if (bm == null) {
throw new RuntimeException("Failed to extractAlpha on Bitmap");
@@ -1853,6 +1868,8 @@ public final class Bitmap implements Parcelable {
*/
public boolean sameAs(Bitmap other) {
checkRecycled("Can't call sameAs on a recycled bitmap!");
noteHardwareBitmapSlowCall();
other.noteHardwareBitmapSlowCall();
if (this == other) return true;
if (other == null) return false;
if (other.isRecycled()) {

View File

@@ -486,7 +486,6 @@ void Bitmap::setAlphaType(SkAlphaType alphaType) {
void Bitmap::getSkBitmap(SkBitmap* outBitmap) {
outBitmap->setHasHardwareMipMap(mHasHardwareMipMap);
if (isHardware()) {
ALOGW("Warning: attempt to read pixels from hardware bitmap, which is very slow operation");
outBitmap->allocPixels(info());
uirenderer::renderthread::RenderProxy::copyGraphicBufferInto(graphicBuffer(), outBitmap);
return;