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

Commit 3a85d2dd authored by Avichal Rakesh's avatar Avichal Rakesh
Browse files

Add clear command to `watch` command

This CL adds a `clear` command to CameraServer's watch command to clear
any cached dumps from watched clients.

Bug: 199746421
Test: Manually Tested
Change-Id: I2d8092ab2a88a5ac838e8def0685543b46362752
parent 1cda16b0
Loading
Loading
Loading
Loading
+34 −22
Original line number Diff line number Diff line
@@ -4752,6 +4752,8 @@ status_t CameraService::handleWatchCommand(const Vector<String16>& args, int out
        return stopWatchingTags(outFd);
    } else if (args.size() >= 2 && args[1] == String16("print")) {
        return printWatchedTags(args, outFd);
    } else if (args.size() == 2 && args[1] == String16("clear")) {
        return clearCachedMonitoredTagDumps(outFd);
    }
    dprintf(outFd, "Camera service watch commands:\n"
                 "  start -m <comma_separated_tag_list> [-c <comma_separated_client_list>]\n"
@@ -4762,7 +4764,8 @@ status_t CameraService::handleWatchCommand(const Vector<String16>& args, int out
                 "  stop stops watching all tags\n"
                 "  print [-n <refresh_interval_ms>]\n"
                 "        prints the monitored information in real time\n"
                 "        Hit Ctrl+C to exit\n");
                 "        Hit Ctrl+C to exit\n"
                 "  clear clears all buffers storing information for watch command");
  return BAD_VALUE;
}

@@ -4830,6 +4833,14 @@ status_t CameraService::stopWatchingTags(int outFd) {
    return OK;
}

status_t CameraService::clearCachedMonitoredTagDumps(int outFd) {
    Mutex::Autolock lock(mLogLock);
    size_t clearedSize = mWatchedClientsDumpCache.size();
    mWatchedClientsDumpCache.clear();
    dprintf(outFd, "Cleared tag information of %zu cached clients.\n", clearedSize);
    return OK;
}

status_t CameraService::printWatchedTags(const Vector<String16> &args, int outFd) {
    // Figure outFd refresh interval, if present in args
    useconds_t refreshTimeoutMs = 1000; // refresh every 1s by default
@@ -4845,10 +4856,11 @@ status_t CameraService::printWatchedTags(const Vector<String16> &args, int outFd
        }
    }

    mLogLock.lock();
    std::set<String16> connectedMonitoredClients;
    {
        Mutex::Autolock logLock(mLogLock);
        bool serviceLock = tryLock(mServiceLock);
        // get all watched clients that are currently connected
    std::set<String16> connectedMonitoredClients;
        for (const auto &clientDescriptor: mActiveClientManager.getAll()) {
            if (clientDescriptor == nullptr) { continue; }

@@ -4870,7 +4882,7 @@ status_t CameraService::printWatchedTags(const Vector<String16> &args, int outFd
            dprintf(outFd, "Client: %s\n", String8(package).string());
            dprintf(outFd, "%s\n", kv.second.c_str());
        }
    mLogLock.unlock();
    }

    if (connectedMonitoredClients.empty()) {
        dprintf(outFd, "No watched client active.\n");
@@ -4982,7 +4994,7 @@ status_t CameraService::printHelp(int out) {
        "      Valid values 0=OFF, 1=ON for JPEG\n"
        "  get-image-dump-mask returns the current image-dump-mask value\n"
        "  set-camera-mute <0/1> enable or disable camera muting\n"
        "  watch <start|stop|dump|print> manages tag monitoring in connected clients\n"
        "  watch <start|stop|dump|print|clear> manages tag monitoring in connected clients\n"
        "  help print this message\n");
}

+3 −0
Original line number Diff line number Diff line
@@ -1180,6 +1180,9 @@ private:
    // Disable tag monitoring
    status_t stopWatchingTags(int outFd);

    // Clears mWatchedClientsDumpCache
    status_t clearCachedMonitoredTagDumps(int outFd);

    // Print events of monitored tags in all cached and attached clients
    status_t printWatchedTags(const Vector<String16> &args, int outFd);