transcoding: pass package name from client to service
bug: 159172726
Change-Id: I9c35c23f3d6eb5b03092813c891f9cc98a4c6fc8
diff --git a/media/libmediatranscoding/TranscodingSessionController.cpp b/media/libmediatranscoding/TranscodingSessionController.cpp
index 2306395..1c3ee7e 100644
--- a/media/libmediatranscoding/TranscodingSessionController.cpp
+++ b/media/libmediatranscoding/TranscodingSessionController.cpp
@@ -66,6 +66,7 @@
mUidSortedList.push_back(OFFLINE_UID);
mOfflineUidIterator = mUidSortedList.begin();
mSessionQueues.emplace(OFFLINE_UID, SessionQueueType());
+ mUidPackageNames[OFFLINE_UID] = "(offline)";
}
TranscodingSessionController::~TranscodingSessionController() {}
@@ -83,13 +84,6 @@
result.append(buffer);
std::vector<int32_t> uids(mUidSortedList.begin(), mUidSortedList.end());
- // Exclude last uid, which is for offline queue
- uids.pop_back();
- std::vector<std::string> packageNames;
- if (TranscodingUidPolicy::getNamesForUids(uids, &packageNames)) {
- uids.push_back(OFFLINE_UID);
- packageNames.push_back("(offline)");
- }
for (int32_t i = 0; i < uids.size(); i++) {
const uid_t uid = uids[i];
@@ -98,7 +92,7 @@
continue;
}
snprintf(buffer, SIZE, " Uid: %d, pkg: %s\n", uid,
- packageNames.empty() ? "(unknown)" : packageNames[i].c_str());
+ mUidPackageNames.count(uid) > 0 ? mUidPackageNames[uid].c_str() : "(unknown)");
result.append(buffer);
snprintf(buffer, SIZE, " Num of sessions: %zu\n", mSessionQueues[uid].size());
result.append(buffer);
@@ -120,6 +114,12 @@
result.append(buffer);
snprintf(buffer, SIZE, " Dst: %s\n", request.destinationFilePath.c_str());
result.append(buffer);
+ // For the offline queue, print out the original client.
+ if (uid == OFFLINE_UID) {
+ snprintf(buffer, SIZE, " Original Client: %s\n",
+ request.clientPackageName.c_str());
+ result.append(buffer);
+ }
}
}
@@ -274,6 +274,11 @@
return false;
}
+ // Add the uid package name to the store of package names we already know.
+ if (mUidPackageNames.count(uid) == 0) {
+ mUidPackageNames.emplace(uid, request.clientPackageName);
+ }
+
// TODO(chz): only support offline vs real-time for now. All kUnspecified sessions
// go to offline queue.
if (request.priority == TranscodingSessionPriority::kUnspecified) {
diff --git a/media/libmediatranscoding/TranscodingUidPolicy.cpp b/media/libmediatranscoding/TranscodingUidPolicy.cpp
index 9763921..084a871 100644
--- a/media/libmediatranscoding/TranscodingUidPolicy.cpp
+++ b/media/libmediatranscoding/TranscodingUidPolicy.cpp
@@ -114,28 +114,6 @@
////////////////////////////////////////////////////////////////////////////
//static
-bool TranscodingUidPolicy::getNamesForUids(const std::vector<int32_t>& uids,
- std::vector<std::string>* names) {
- names->clear();
- sp<IServiceManager> sm(defaultServiceManager());
- sp<IBinder> binder(sm->getService(String16("package_native")));
- if (binder == nullptr) {
- ALOGE("getService package_native failed");
- return false;
- }
-
- sp<content::pm::IPackageManagerNative> packageMgr =
- interface_cast<content::pm::IPackageManagerNative>(binder);
- binder::Status status = packageMgr->getNamesForUids(uids, names);
-
- if (!status.isOk() || names->size() != uids.size()) {
- names->clear();
- return false;
- }
- return true;
-}
-
-//static
status_t TranscodingUidPolicy::getUidForPackage(String16 packageName, /*inout*/ uid_t& uid) {
PermissionController pc;
uid = pc.getPackageUid(packageName, 0);
diff --git a/media/libmediatranscoding/aidl/android/media/TranscodingRequestParcel.aidl b/media/libmediatranscoding/aidl/android/media/TranscodingRequestParcel.aidl
index 03c24f0..4b19f6a 100644
--- a/media/libmediatranscoding/aidl/android/media/TranscodingRequestParcel.aidl
+++ b/media/libmediatranscoding/aidl/android/media/TranscodingRequestParcel.aidl
@@ -53,6 +53,11 @@
int clientPid = -1;
/**
+ * The package name of the client whom this transcoding request is for.
+ */
+ @utf8InCpp String clientPackageName;
+
+ /**
* Type of the transcoding.
*/
TranscodingType transcodingType;
diff --git a/media/libmediatranscoding/include/media/TranscodingRequest.h b/media/libmediatranscoding/include/media/TranscodingRequest.h
index aae621f..485403f 100644
--- a/media/libmediatranscoding/include/media/TranscodingRequest.h
+++ b/media/libmediatranscoding/include/media/TranscodingRequest.h
@@ -39,6 +39,7 @@
destinationFilePath = parcel.destinationFilePath;
clientUid = parcel.clientUid;
clientPid = parcel.clientPid;
+ clientPackageName = parcel.clientPackageName;
transcodingType = parcel.transcodingType;
requestedVideoTrackFormat = parcel.requestedVideoTrackFormat;
priority = parcel.priority;
diff --git a/media/libmediatranscoding/include/media/TranscodingSessionController.h b/media/libmediatranscoding/include/media/TranscodingSessionController.h
index 9ab3518..c082074 100644
--- a/media/libmediatranscoding/include/media/TranscodingSessionController.h
+++ b/media/libmediatranscoding/include/media/TranscodingSessionController.h
@@ -107,6 +107,7 @@
// previous top app, etc.
std::list<uid_t> mUidSortedList;
std::list<uid_t>::iterator mOfflineUidIterator;
+ std::map<uid_t, std::string> mUidPackageNames;
std::shared_ptr<TranscoderInterface> mTranscoder;
std::shared_ptr<UidPolicyInterface> mUidPolicy;
diff --git a/media/libmediatranscoding/include/media/TranscodingUidPolicy.h b/media/libmediatranscoding/include/media/TranscodingUidPolicy.h
index 946770c..4c642de 100644
--- a/media/libmediatranscoding/include/media/TranscodingUidPolicy.h
+++ b/media/libmediatranscoding/include/media/TranscodingUidPolicy.h
@@ -49,7 +49,6 @@
void setCallback(const std::shared_ptr<UidPolicyCallbackInterface>& cb) override;
// ~UidPolicyInterface
- static bool getNamesForUids(const std::vector<int32_t>& uids, std::vector<std::string>* names);
static status_t getUidForPackage(String16 packageName, /*inout*/ uid_t& uid);
private:
diff --git a/services/mediatranscoding/tests/MediaTranscodingServiceTestHelper.h b/services/mediatranscoding/tests/MediaTranscodingServiceTestHelper.h
index 5f4f645..f4d3ff8 100644
--- a/services/mediatranscoding/tests/MediaTranscodingServiceTestHelper.h
+++ b/services/mediatranscoding/tests/MediaTranscodingServiceTestHelper.h
@@ -368,6 +368,7 @@
request.priority = priority;
request.clientPid = (overridePid == -1) ? mClientPid : overridePid;
request.clientUid = (overrideUid == -1) ? mClientUid : overrideUid;
+ request.clientPackageName = (overrideUid == -1) ? mPackageName : "";
if (bitrateBps > 0) {
request.requestedVideoTrackFormat.emplace(TranscodingVideoTrackFormat());
request.requestedVideoTrackFormat->bitrateBps = bitrateBps;