diff options
| -rw-r--r-- | apct-tests/perftests/core/src/android/libcore/regression/StringBuilderPerfTest.java | 17 | ||||
| -rw-r--r-- | cmds/incidentd/src/IncidentService.cpp | 6 | ||||
| -rw-r--r-- | core/java/com/android/internal/display/BrightnessSynchronizer.java | 32 | ||||
| -rw-r--r-- | libs/hwui/DeferredLayerUpdater.cpp | 3 | ||||
| -rw-r--r-- | libs/hwui/Layer.h | 6 | ||||
| -rw-r--r-- | libs/hwui/pipeline/skia/LayerDrawable.cpp | 27 | ||||
| -rw-r--r-- | media/java/android/media/MediaMuxer.java | 23 | ||||
| -rw-r--r-- | media/jni/android_media_MediaMuxer.cpp | 6 | ||||
| -rw-r--r-- | packages/SystemUI/Android.bp | 2 | ||||
| -rw-r--r-- | services/core/java/com/android/server/audio/AudioDeviceBroker.java | 2 | ||||
| -rw-r--r-- | tests/TrustTests/Android.bp | 2 |
11 files changed, 79 insertions, 47 deletions
diff --git a/apct-tests/perftests/core/src/android/libcore/regression/StringBuilderPerfTest.java b/apct-tests/perftests/core/src/android/libcore/regression/StringBuilderPerfTest.java index 34fb88bf8627..10fa8b93acaf 100644 --- a/apct-tests/perftests/core/src/android/libcore/regression/StringBuilderPerfTest.java +++ b/apct-tests/perftests/core/src/android/libcore/regression/StringBuilderPerfTest.java @@ -20,28 +20,19 @@ import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.test.suitebuilder.annotation.LargeTest; +import androidx.test.runner.AndroidJUnit4; + import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; - -import java.util.Arrays; -import java.util.Collection; /** Tests the performance of various StringBuilder methods. */ -@RunWith(Parameterized.class) +@RunWith(AndroidJUnit4.class) @LargeTest public class StringBuilderPerfTest { @Rule public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); - @Parameters(name = "mLength={0}") - public static Collection<Object[]> data() { - return Arrays.asList(new Object[][] {{1}, {10}, {100}}); - } - - @Parameterized.Parameter(0) - public int mLength; + public int mLength = 100; @Test public void timeAppendBoolean() { diff --git a/cmds/incidentd/src/IncidentService.cpp b/cmds/incidentd/src/IncidentService.cpp index 836801deaa08..5af02f405ed9 100644 --- a/cmds/incidentd/src/IncidentService.cpp +++ b/cmds/incidentd/src/IncidentService.cpp @@ -52,11 +52,7 @@ enum { #define SKIPPED_DUMPSTATE_SECTIONS { \ 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, /* Logs */ \ 1200, 1201, 1202, /* Native, hal, java traces */ \ - 3000, 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010, 3011, 3012, 3013, \ - 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3027, 3028, 3029, \ - 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, \ - 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 4000, \ - 4001, /* Dumpsys */ } + 3018, /* dumpsys meminfo*/ } namespace android { namespace os { diff --git a/core/java/com/android/internal/display/BrightnessSynchronizer.java b/core/java/com/android/internal/display/BrightnessSynchronizer.java index 627631a376f7..62c7966bb2d6 100644 --- a/core/java/com/android/internal/display/BrightnessSynchronizer.java +++ b/core/java/com/android/internal/display/BrightnessSynchronizer.java @@ -115,7 +115,7 @@ public class BrightnessSynchronizer { Slog.i(TAG, "Setting initial brightness to default value of: " + defaultBrightness); } - mBrightnessSyncObserver.startObserving(); + mBrightnessSyncObserver.startObserving(mHandler); mHandler.sendEmptyMessageAtTime(MSG_RUN_UPDATE, mClock.uptimeMillis()); } @@ -482,27 +482,29 @@ public class BrightnessSynchronizer { } }; - private final ContentObserver mContentObserver = new ContentObserver(mHandler) { - @Override - public void onChange(boolean selfChange, Uri uri) { - if (selfChange) { - return; - } - if (BRIGHTNESS_URI.equals(uri)) { - handleBrightnessChangeInt(getScreenBrightnessInt()); + private ContentObserver createBrightnessContentObserver(Handler handler) { + return new ContentObserver(handler) { + @Override + public void onChange(boolean selfChange, Uri uri) { + if (selfChange) { + return; + } + if (BRIGHTNESS_URI.equals(uri)) { + handleBrightnessChangeInt(getScreenBrightnessInt()); + } } - } - }; + }; + } boolean isObserving() { return mIsObserving; } - void startObserving() { + void startObserving(Handler handler) { final ContentResolver cr = mContext.getContentResolver(); - cr.registerContentObserver(BRIGHTNESS_URI, false, mContentObserver, - UserHandle.USER_ALL); - mDisplayManager.registerDisplayListener(mListener, mHandler, + cr.registerContentObserver(BRIGHTNESS_URI, false, + createBrightnessContentObserver(handler), UserHandle.USER_ALL); + mDisplayManager.registerDisplayListener(mListener, handler, DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS); mIsObserving = true; } diff --git a/libs/hwui/DeferredLayerUpdater.cpp b/libs/hwui/DeferredLayerUpdater.cpp index a5c0924579eb..b763a96e8e8a 100644 --- a/libs/hwui/DeferredLayerUpdater.cpp +++ b/libs/hwui/DeferredLayerUpdater.cpp @@ -169,6 +169,8 @@ void DeferredLayerUpdater::apply() { sk_sp<SkImage> layerImage = mImageSlots[slot].createIfNeeded( hardwareBuffer, dataspace, newContent, mRenderState.getRenderThread().getGrContext()); + AHardwareBuffer_Desc bufferDesc; + AHardwareBuffer_describe(hardwareBuffer, &bufferDesc); // unref to match the ref added by ASurfaceTexture_dequeueBuffer. eglCreateImageKHR // (invoked by createIfNeeded) will add a ref to the AHardwareBuffer. AHardwareBuffer_release(hardwareBuffer); @@ -189,6 +191,7 @@ void DeferredLayerUpdater::apply() { maxLuminanceNits = std::max(cta861_3.maxContentLightLevel, maxLuminanceNits); } + mLayer->setBufferFormat(bufferDesc.format); updateLayer(forceFilter, layerImage, outTransform, currentCropRect, maxLuminanceNits); } diff --git a/libs/hwui/Layer.h b/libs/hwui/Layer.h index 47eb5d3bfb83..345749b6d920 100644 --- a/libs/hwui/Layer.h +++ b/libs/hwui/Layer.h @@ -102,6 +102,10 @@ public: inline float getMaxLuminanceNits() { return mMaxLuminanceNits; } + void setBufferFormat(uint32_t format) { mBufferFormat = format; } + + uint32_t getBufferFormat() const { return mBufferFormat; } + void draw(SkCanvas* canvas); protected: @@ -169,6 +173,8 @@ private: */ float mMaxLuminanceNits = -1; + uint32_t mBufferFormat = 0; + }; // struct Layer } // namespace uirenderer diff --git a/libs/hwui/pipeline/skia/LayerDrawable.cpp b/libs/hwui/pipeline/skia/LayerDrawable.cpp index 2fba13c3cfea..3ba540921f64 100644 --- a/libs/hwui/pipeline/skia/LayerDrawable.cpp +++ b/libs/hwui/pipeline/skia/LayerDrawable.cpp @@ -107,6 +107,32 @@ static bool isHdrDataspace(ui::Dataspace dataspace) { return transfer == HAL_DATASPACE_TRANSFER_ST2084 || transfer == HAL_DATASPACE_TRANSFER_HLG; } +static void adjustCropForYUV(uint32_t format, int bufferWidth, int bufferHeight, SkRect* cropRect) { + // Chroma channels of YUV420 images are subsampled we may need to shrink the crop region by + // a whole texel on each side. Since skia still adds its own 0.5 inset, we apply an + // additional 0.5 inset. See GLConsumer::computeTransformMatrix for details. + float shrinkAmount = 0.0f; + switch (format) { + // Use HAL formats since some AHB formats are only available in vndk + case HAL_PIXEL_FORMAT_YCBCR_420_888: + case HAL_PIXEL_FORMAT_YV12: + case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED: + shrinkAmount = 0.5f; + break; + default: + break; + } + + // Shrink the crop if it has more than 1-px and differs from the buffer size. + if (cropRect->width() > 1 && cropRect->width() < bufferWidth) { + cropRect->inset(shrinkAmount, 0); + } + + if (cropRect->height() > 1 && cropRect->height() < bufferHeight) { + cropRect->inset(0, shrinkAmount); + } +} + // TODO: Context arg probably doesn't belong here – do debug check at callsite instead. bool LayerDrawable::DrawLayer(GrRecordingContext* context, SkCanvas* canvas, @@ -142,6 +168,7 @@ bool LayerDrawable::DrawLayer(GrRecordingContext* context, SkRect skiaSrcRect; if (srcRect && !srcRect->isEmpty()) { skiaSrcRect = *srcRect; + adjustCropForYUV(layer->getBufferFormat(), imageWidth, imageHeight, &skiaSrcRect); } else { skiaSrcRect = SkRect::MakeIWH(imageWidth, imageHeight); } diff --git a/media/java/android/media/MediaMuxer.java b/media/java/android/media/MediaMuxer.java index b8e7930e1dca..ad4feecf7d3c 100644 --- a/media/java/android/media/MediaMuxer.java +++ b/media/java/android/media/MediaMuxer.java @@ -335,13 +335,13 @@ final public class MediaMuxer { } /** - * Constructor. * Creates a media muxer that writes to the specified path. + * <p>The caller must not use the file {@code path} before calling {@link #stop}. * @param path The path of the output media file. * @param format The format of the output media file. * @see android.media.MediaMuxer.OutputFormat * @throws IllegalArgumentException if path is invalid or format is not supported. - * @throws IOException if failed to open the file for write. + * @throws IOException if an error occurs while opening or creating the output file. */ public MediaMuxer(@NonNull String path, @Format int format) throws IOException { if (path == null) { @@ -363,16 +363,19 @@ final public class MediaMuxer { } /** - * Constructor. - * Creates a media muxer that writes to the specified FileDescriptor. File descriptor - * must be seekable and writable. Application should not use the file referenced - * by this file descriptor until {@link #stop}. It is the application's responsibility - * to close the file descriptor. It is safe to do so as soon as this call returns. - * @param fd The FileDescriptor of the output media file. + * Creates a media muxer that writes to the specified FileDescriptor. + * <p>The caller must not use the file referenced by the specified {@code fd} before calling + * {@link #stop}. + * <p>It is the caller's responsibility to close the file descriptor, which is safe to do so + * as soon as this call returns. + * @param fd The FileDescriptor of the output media file. If {@code format} is + * {@link OutputFormat#MUXER_OUTPUT_WEBM}, {@code fd} must be open in read-write mode. + * Otherwise, write mode is sufficient, but read-write is also accepted. * @param format The format of the output media file. * @see android.media.MediaMuxer.OutputFormat - * @throws IllegalArgumentException if fd is invalid or format is not supported. - * @throws IOException if failed to open the file for write. + * @throws IllegalArgumentException if {@code format} is not supported, or if {@code fd} is + * not open in the expected mode. + * @throws IOException if an error occurs while performing an IO operation. */ public MediaMuxer(@NonNull FileDescriptor fd, @Format int format) throws IOException { setUpMediaMuxer(fd, format); diff --git a/media/jni/android_media_MediaMuxer.cpp b/media/jni/android_media_MediaMuxer.cpp index 267917653efb..b664325ab0d1 100644 --- a/media/jni/android_media_MediaMuxer.cpp +++ b/media/jni/android_media_MediaMuxer.cpp @@ -165,7 +165,11 @@ static jlong android_media_MediaMuxer_native_setup( MediaMuxer::OutputFormat fileFormat = static_cast<MediaMuxer::OutputFormat>(format); - sp<MediaMuxer> muxer = new MediaMuxer(fd, fileFormat); + sp<MediaMuxer> muxer = MediaMuxer::create(fd, fileFormat); + if (muxer == nullptr) { + jniThrowException(env, "java/lang/IllegalArgumentException", "Muxer creation failed"); + return 0; + } muxer->incStrong(clazz); return reinterpret_cast<jlong>(muxer.get()); } diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp index 104998c53e09..0333b2d779df 100644 --- a/packages/SystemUI/Android.bp +++ b/packages/SystemUI/Android.bp @@ -228,7 +228,7 @@ android_library { "metrics-helper-lib", "hamcrest-library", "androidx.test.rules", - "androidx.test.uiautomator", + "androidx.test.uiautomator_uiautomator", "mockito-target-extended-minus-junit4", "testables", "truth-prebuilt", diff --git a/services/core/java/com/android/server/audio/AudioDeviceBroker.java b/services/core/java/com/android/server/audio/AudioDeviceBroker.java index 9a5171243864..8e179b942d1e 100644 --- a/services/core/java/com/android/server/audio/AudioDeviceBroker.java +++ b/services/core/java/com/android/server/audio/AudioDeviceBroker.java @@ -424,7 +424,7 @@ import java.util.concurrent.atomic.AtomicBoolean; AudioDeviceAttributes device = crc != null ? crc.getDevice() : null; if (AudioService.DEBUG_COMM_RTE) { Log.v(TAG, "requestedCommunicationDevice, device: " - + device + "mAudioModeOwner: " + mAudioModeOwner.toString()); + + device + " mAudioModeOwner: " + mAudioModeOwner.toString()); } return device; } diff --git a/tests/TrustTests/Android.bp b/tests/TrustTests/Android.bp index 77f98e88f1eb..a1b888aef934 100644 --- a/tests/TrustTests/Android.bp +++ b/tests/TrustTests/Android.bp @@ -24,7 +24,7 @@ android_test { static_libs: [ "androidx.test.rules", "androidx.test.ext.junit", - "androidx.test.uiautomator", + "androidx.test.uiautomator_uiautomator", "mockito-target-minus-junit4", "servicestests-utils", "truth-prebuilt", |