Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 94411332 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "transcoding: pass package name from client to service"

parents b757a828 cf3f8ee0
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -66,6 +66,7 @@ TranscodingSessionController::TranscodingSessionController(
    mUidSortedList.push_back(OFFLINE_UID);
    mOfflineUidIterator = mUidSortedList.begin();
    mSessionQueues.emplace(OFFLINE_UID, SessionQueueType());
    mUidPackageNames[OFFLINE_UID] = "(offline)";
}

TranscodingSessionController::~TranscodingSessionController() {}
@@ -83,13 +84,6 @@ void TranscodingSessionController::dumpAllSessions(int fd, const Vector<String16
    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 @@ void TranscodingSessionController::dumpAllSessions(int fd, const Vector<String16
            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 @@ void TranscodingSessionController::dumpAllSessions(int fd, const Vector<String16
            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 @@ bool TranscodingSessionController::submit(
        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) {
+0 −22
Original line number Diff line number Diff line
@@ -113,28 +113,6 @@ void TranscodingUidPolicy::UidObserver::binderDied(const wp<IBinder>& /*who*/) {

////////////////////////////////////////////////////////////////////////////

//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;
+5 −0
Original line number Diff line number Diff line
@@ -52,6 +52,11 @@ parcelable TranscodingRequestParcel {
     */
    int clientPid = -1;

    /**
     * The package name of the client whom this transcoding request is for.
     */
    @utf8InCpp String clientPackageName;

    /**
     * Type of the transcoding.
     */
+1 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ private:
        destinationFilePath = parcel.destinationFilePath;
        clientUid = parcel.clientUid;
        clientPid = parcel.clientPid;
        clientPackageName = parcel.clientPackageName;
        transcodingType = parcel.transcodingType;
        requestedVideoTrackFormat = parcel.requestedVideoTrackFormat;
        priority = parcel.priority;
+1 −0
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ private:
    // 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;
Loading