diff --git a/core/api/current.txt b/core/api/current.txt index 025fdcbd12e56..23f3008c05c3d 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -24363,6 +24363,11 @@ package android.media.effect { package android.media.metrics { + public final class EditingSession implements java.lang.AutoCloseable { + method public void close(); + method @NonNull public android.media.metrics.LogSessionId getSessionId(); + } + public abstract class Event { method @NonNull public android.os.Bundle getMetricsBundle(); method @IntRange(from=0xffffffff) public long getTimeSinceCreatedMillis(); @@ -24374,8 +24379,10 @@ package android.media.metrics { } public final class MediaMetricsManager { + method @NonNull public android.media.metrics.EditingSession createEditingSession(); method @NonNull public android.media.metrics.PlaybackSession createPlaybackSession(); method @NonNull public android.media.metrics.RecordingSession createRecordingSession(); + method @NonNull public android.media.metrics.TranscodingSession createTranscodingSession(); field public static final long INVALID_TIMESTAMP = -1L; // 0xffffffffffffffffL } @@ -24623,6 +24630,11 @@ package android.media.metrics { method @NonNull public android.media.metrics.TrackChangeEvent.Builder setWidth(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int); } + public final class TranscodingSession implements java.lang.AutoCloseable { + method public void close(); + method @NonNull public android.media.metrics.LogSessionId getSessionId(); + } + } package android.media.midi { diff --git a/media/java/android/media/metrics/EditingSession.java b/media/java/android/media/metrics/EditingSession.java new file mode 100644 index 0000000000000..2a48a728a2f0a --- /dev/null +++ b/media/java/android/media/metrics/EditingSession.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2021 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. + */ + +package android.media.metrics; + +import android.annotation.NonNull; +import android.annotation.Nullable; + +import com.android.internal.util.AnnotationValidations; + +import java.util.Objects; + +/** + * An instances of this class represents a session of media editing. + */ +public final class EditingSession implements AutoCloseable { + private final @NonNull String mId; + private final @NonNull MediaMetricsManager mManager; + private final @NonNull LogSessionId mLogSessionId; + + /** @hide */ + public EditingSession(@NonNull String id, @NonNull MediaMetricsManager manager) { + mId = id; + mManager = manager; + AnnotationValidations.validate(NonNull.class, null, mId); + AnnotationValidations.validate(NonNull.class, null, mManager); + mLogSessionId = new LogSessionId(mId); + } + + public @NonNull LogSessionId getSessionId() { + return mLogSessionId; + } + + @Override + public boolean equals(@Nullable Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + EditingSession that = (EditingSession) o; + return Objects.equals(mId, that.mId); + } + + @Override + public int hashCode() { + return Objects.hash(mId); + } + + @Override + public void close() { + } +} diff --git a/media/java/android/media/metrics/IMediaMetricsManager.aidl b/media/java/android/media/metrics/IMediaMetricsManager.aidl index f2c0d44a00b1e..399e888a754db 100644 --- a/media/java/android/media/metrics/IMediaMetricsManager.aidl +++ b/media/java/android/media/metrics/IMediaMetricsManager.aidl @@ -28,10 +28,14 @@ import android.media.metrics.TrackChangeEvent; */ interface IMediaMetricsManager { void reportPlaybackMetrics(in String sessionId, in PlaybackMetrics metrics, int userId); + String getPlaybackSessionId(int userId); String getRecordingSessionId(int userId); void reportNetworkEvent(in String sessionId, in NetworkEvent event, int userId); void reportPlaybackErrorEvent(in String sessionId, in PlaybackErrorEvent event, int userId); void reportPlaybackStateEvent(in String sessionId, in PlaybackStateEvent event, int userId); void reportTrackChangeEvent(in String sessionId, in TrackChangeEvent event, int userId); -} \ No newline at end of file + + String getTranscodingSessionId(int userId); + String getEditingSessionId(int userId); +} diff --git a/media/java/android/media/metrics/MediaMetricsManager.java b/media/java/android/media/metrics/MediaMetricsManager.java index 23b697ff75124..74e760a2c57cd 100644 --- a/media/java/android/media/metrics/MediaMetricsManager.java +++ b/media/java/android/media/metrics/MediaMetricsManager.java @@ -116,6 +116,34 @@ public final class MediaMetricsManager { } } + /** + * Creates a transcoding session. + */ + @NonNull + public TranscodingSession createTranscodingSession() { + try { + String id = mService.getTranscodingSessionId(mUserId); + TranscodingSession session = new TranscodingSession(id, this); + return session; + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Creates a editing session. + */ + @NonNull + public EditingSession createEditingSession() { + try { + String id = mService.getEditingSessionId(mUserId); + EditingSession session = new EditingSession(id, this); + return session; + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** * Reports error event. * @hide diff --git a/media/java/android/media/metrics/TranscodingSession.java b/media/java/android/media/metrics/TranscodingSession.java new file mode 100644 index 0000000000000..e6d359aec35db --- /dev/null +++ b/media/java/android/media/metrics/TranscodingSession.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2021 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. + */ + +package android.media.metrics; + +import android.annotation.NonNull; +import android.annotation.Nullable; + +import com.android.internal.util.AnnotationValidations; + +import java.util.Objects; + +/** + * An instances of this class represents a session of media Transcoding. + */ +public final class TranscodingSession implements AutoCloseable { + private final @NonNull String mId; + private final @NonNull MediaMetricsManager mManager; + private final @NonNull LogSessionId mLogSessionId; + + /** @hide */ + public TranscodingSession(@NonNull String id, @NonNull MediaMetricsManager manager) { + mId = id; + mManager = manager; + AnnotationValidations.validate(NonNull.class, null, mId); + AnnotationValidations.validate(NonNull.class, null, mManager); + mLogSessionId = new LogSessionId(mId); + } + + public @NonNull LogSessionId getSessionId() { + return mLogSessionId; + } + + @Override + public boolean equals(@Nullable Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TranscodingSession that = (TranscodingSession) o; + return Objects.equals(mId, that.mId); + } + + @Override + public int hashCode() { + return Objects.hash(mId); + } + + @Override + public void close() { + } +} diff --git a/services/core/java/com/android/server/media/metrics/MediaMetricsManagerService.java b/services/core/java/com/android/server/media/metrics/MediaMetricsManagerService.java index fd141bd783710..272e577a8d732 100644 --- a/services/core/java/com/android/server/media/metrics/MediaMetricsManagerService.java +++ b/services/core/java/com/android/server/media/metrics/MediaMetricsManagerService.java @@ -221,6 +221,16 @@ public final class MediaMetricsManagerService extends SystemService { return getSessionIdInternal(userId); } + @Override + public String getTranscodingSessionId(int userId) { + return getSessionIdInternal(userId); + } + + @Override + public String getEditingSessionId(int userId) { + return getSessionIdInternal(userId); + } + @Override public void reportPlaybackErrorEvent( String sessionId, PlaybackErrorEvent event, int userId) {