Loading cmds/incidentd/Android.mk +3 −16 Original line number Diff line number Diff line Loading @@ -25,16 +25,7 @@ include $(CLEAR_VARS) LOCAL_MODULE := incidentd LOCAL_SRC_FILES := \ src/PrivacyBuffer.cpp \ src/FdBuffer.cpp \ src/IncidentService.cpp \ src/Privacy.cpp \ src/Reporter.cpp \ src/Section.cpp \ src/incidentd_util.cpp \ src/main.cpp \ src/report_directory.cpp LOCAL_SRC_FILES := $(call all-cpp-files-under, src) \ LOCAL_CFLAGS += \ -Wall -Werror -Wno-missing-field-initializers -Wno-unused-variable -Wunused-parameter Loading Loading @@ -110,19 +101,15 @@ LOCAL_CFLAGS := -Werror -Wall -Wno-unused-variable -Wunused-parameter LOCAL_C_INCLUDES += $(LOCAL_PATH)/src LOCAL_SRC_FILES := \ LOCAL_SRC_FILES := $(call all-cpp-files-under, tests) \ src/PrivacyBuffer.cpp \ src/FdBuffer.cpp \ src/Privacy.cpp \ src/Reporter.cpp \ src/Section.cpp \ src/Throttler.cpp \ src/incidentd_util.cpp \ src/report_directory.cpp \ tests/section_list.cpp \ tests/PrivacyBuffer_test.cpp \ tests/FdBuffer_test.cpp \ tests/Reporter_test.cpp \ tests/Section_test.cpp \ LOCAL_STATIC_LIBRARIES := \ libgmock \ Loading cmds/incidentd/src/FdBuffer.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ #define DEBUG false #include "Log.h" #include "FdBuffer.h" Loading cmds/incidentd/src/IncidentService.cpp +28 −6 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ #define DEBUG false #include "Log.h" #include "IncidentService.h" Loading @@ -38,9 +39,11 @@ using namespace android::base; enum { WHAT_RUN_REPORT = 1, WHAT_SEND_BACKLOG_TO_DROPBOX = 2 }; //#define DEFAULT_BACKLOG_DELAY_NS (1000000000LL * 60 * 5) #define DEFAULT_BACKLOG_DELAY_NS (1000000000LL) #define DEFAULT_BYTES_SIZE_LIMIT (20 * 1024 * 1024) // 20MB #define DEFAULT_REFACTORY_PERIOD_MS (24 * 60 * 60 * 1000) // 1 Day // ================================================================================ String16 const DUMP_PERMISSION("android.permission.DUMP"); String16 const USAGE_STATS_PERMISSION("android.permission.PACKAGE_USAGE_STATS"); Loading Loading @@ -113,8 +116,12 @@ sp<ReportRequest> ReportRequestQueue::getNextRequest() { } // ================================================================================ ReportHandler::ReportHandler(const sp<Looper>& handlerLooper, const sp<ReportRequestQueue>& queue) : mBacklogDelay(DEFAULT_BACKLOG_DELAY_NS), mHandlerLooper(handlerLooper), mQueue(queue) {} ReportHandler::ReportHandler(const sp<Looper>& handlerLooper, const sp<ReportRequestQueue>& queue, const sp<Throttler>& throttler) : mBacklogDelay(DEFAULT_BACKLOG_DELAY_NS), mHandlerLooper(handlerLooper), mQueue(queue), mThrottler(throttler) {} ReportHandler::~ReportHandler() {} Loading Loading @@ -159,10 +166,17 @@ void ReportHandler::run_report() { reporter->batch.add(request); } if (mThrottler->shouldThrottle()) { ALOGW("RunReport got throttled."); return; } // Take the report, which might take a while. More requests might queue // up while we're doing this, and we'll handle them in their next batch. // TODO: We should further rate-limit the reports to no more than N per time-period. Reporter::run_report_status_t reportStatus = reporter->runReport(); size_t reportByteSize = 0; Reporter::run_report_status_t reportStatus = reporter->runReport(&reportByteSize); mThrottler->addReportSize(reportByteSize); if (reportStatus == Reporter::REPORT_NEEDS_DROPBOX) { unique_lock<mutex> lock(mLock); schedule_send_backlog_to_dropbox_locked(); Loading @@ -184,8 +198,9 @@ void ReportHandler::send_backlog_to_dropbox() { // ================================================================================ IncidentService::IncidentService(const sp<Looper>& handlerLooper) : mQueue(new ReportRequestQueue()) { mHandler = new ReportHandler(handlerLooper, mQueue); : mQueue(new ReportRequestQueue()), mThrottler(new Throttler(DEFAULT_BYTES_SIZE_LIMIT, DEFAULT_REFACTORY_PERIOD_MS)) { mHandler = new ReportHandler(handlerLooper, mQueue, mThrottler); } IncidentService::~IncidentService() {} Loading Loading @@ -294,6 +309,10 @@ status_t IncidentService::command(FILE* in, FILE* out, FILE* err, Vector<String8 if (!args[0].compare(String8("privacy"))) { return cmd_privacy(in, out, err, args); } if (!args[0].compare(String8("throttler"))) { mThrottler->dump(out); return NO_ERROR; } } return cmd_help(out); } Loading @@ -302,6 +321,9 @@ status_t IncidentService::cmd_help(FILE* out) { fprintf(out, "usage: adb shell cmd incident privacy print <section_id>\n"); fprintf(out, "usage: adb shell cmd incident privacy parse <section_id> < proto.txt\n"); fprintf(out, " Prints/parses for the section id.\n"); fprintf(out, "\n"); fprintf(out, "usage: adb shell cmd incident throttler\n"); fprintf(out, " Prints the current throttler state\n"); return NO_ERROR; } Loading cmds/incidentd/src/IncidentService.h +6 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ #include <deque> #include <mutex> #include "Throttler.h" using namespace android; using namespace android::base; using namespace android::binder; Loading @@ -49,7 +51,8 @@ private: // ================================================================================ class ReportHandler : public MessageHandler { public: ReportHandler(const sp<Looper>& handlerLooper, const sp<ReportRequestQueue>& queue); ReportHandler(const sp<Looper>& handlerLooper, const sp<ReportRequestQueue>& queue, const sp<Throttler>& throttler); virtual ~ReportHandler(); virtual void handleMessage(const Message& message); Loading @@ -70,6 +73,7 @@ private: nsecs_t mBacklogDelay; sp<Looper> mHandlerLooper; sp<ReportRequestQueue> mQueue; sp<Throttler> mThrottler; /** * Runs all of the reports that have been queued. Loading Loading @@ -109,6 +113,7 @@ public: private: sp<ReportRequestQueue> mQueue; sp<ReportHandler> mHandler; sp<Throttler> mThrottler; /** * Commands print out help. Loading cmds/incidentd/src/Log.h +0 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ #pragma once #define LOG_TAG "incidentd" #define DEBUG false #include <log/log.h> Loading Loading
cmds/incidentd/Android.mk +3 −16 Original line number Diff line number Diff line Loading @@ -25,16 +25,7 @@ include $(CLEAR_VARS) LOCAL_MODULE := incidentd LOCAL_SRC_FILES := \ src/PrivacyBuffer.cpp \ src/FdBuffer.cpp \ src/IncidentService.cpp \ src/Privacy.cpp \ src/Reporter.cpp \ src/Section.cpp \ src/incidentd_util.cpp \ src/main.cpp \ src/report_directory.cpp LOCAL_SRC_FILES := $(call all-cpp-files-under, src) \ LOCAL_CFLAGS += \ -Wall -Werror -Wno-missing-field-initializers -Wno-unused-variable -Wunused-parameter Loading Loading @@ -110,19 +101,15 @@ LOCAL_CFLAGS := -Werror -Wall -Wno-unused-variable -Wunused-parameter LOCAL_C_INCLUDES += $(LOCAL_PATH)/src LOCAL_SRC_FILES := \ LOCAL_SRC_FILES := $(call all-cpp-files-under, tests) \ src/PrivacyBuffer.cpp \ src/FdBuffer.cpp \ src/Privacy.cpp \ src/Reporter.cpp \ src/Section.cpp \ src/Throttler.cpp \ src/incidentd_util.cpp \ src/report_directory.cpp \ tests/section_list.cpp \ tests/PrivacyBuffer_test.cpp \ tests/FdBuffer_test.cpp \ tests/Reporter_test.cpp \ tests/Section_test.cpp \ LOCAL_STATIC_LIBRARIES := \ libgmock \ Loading
cmds/incidentd/src/FdBuffer.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ #define DEBUG false #include "Log.h" #include "FdBuffer.h" Loading
cmds/incidentd/src/IncidentService.cpp +28 −6 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ #define DEBUG false #include "Log.h" #include "IncidentService.h" Loading @@ -38,9 +39,11 @@ using namespace android::base; enum { WHAT_RUN_REPORT = 1, WHAT_SEND_BACKLOG_TO_DROPBOX = 2 }; //#define DEFAULT_BACKLOG_DELAY_NS (1000000000LL * 60 * 5) #define DEFAULT_BACKLOG_DELAY_NS (1000000000LL) #define DEFAULT_BYTES_SIZE_LIMIT (20 * 1024 * 1024) // 20MB #define DEFAULT_REFACTORY_PERIOD_MS (24 * 60 * 60 * 1000) // 1 Day // ================================================================================ String16 const DUMP_PERMISSION("android.permission.DUMP"); String16 const USAGE_STATS_PERMISSION("android.permission.PACKAGE_USAGE_STATS"); Loading Loading @@ -113,8 +116,12 @@ sp<ReportRequest> ReportRequestQueue::getNextRequest() { } // ================================================================================ ReportHandler::ReportHandler(const sp<Looper>& handlerLooper, const sp<ReportRequestQueue>& queue) : mBacklogDelay(DEFAULT_BACKLOG_DELAY_NS), mHandlerLooper(handlerLooper), mQueue(queue) {} ReportHandler::ReportHandler(const sp<Looper>& handlerLooper, const sp<ReportRequestQueue>& queue, const sp<Throttler>& throttler) : mBacklogDelay(DEFAULT_BACKLOG_DELAY_NS), mHandlerLooper(handlerLooper), mQueue(queue), mThrottler(throttler) {} ReportHandler::~ReportHandler() {} Loading Loading @@ -159,10 +166,17 @@ void ReportHandler::run_report() { reporter->batch.add(request); } if (mThrottler->shouldThrottle()) { ALOGW("RunReport got throttled."); return; } // Take the report, which might take a while. More requests might queue // up while we're doing this, and we'll handle them in their next batch. // TODO: We should further rate-limit the reports to no more than N per time-period. Reporter::run_report_status_t reportStatus = reporter->runReport(); size_t reportByteSize = 0; Reporter::run_report_status_t reportStatus = reporter->runReport(&reportByteSize); mThrottler->addReportSize(reportByteSize); if (reportStatus == Reporter::REPORT_NEEDS_DROPBOX) { unique_lock<mutex> lock(mLock); schedule_send_backlog_to_dropbox_locked(); Loading @@ -184,8 +198,9 @@ void ReportHandler::send_backlog_to_dropbox() { // ================================================================================ IncidentService::IncidentService(const sp<Looper>& handlerLooper) : mQueue(new ReportRequestQueue()) { mHandler = new ReportHandler(handlerLooper, mQueue); : mQueue(new ReportRequestQueue()), mThrottler(new Throttler(DEFAULT_BYTES_SIZE_LIMIT, DEFAULT_REFACTORY_PERIOD_MS)) { mHandler = new ReportHandler(handlerLooper, mQueue, mThrottler); } IncidentService::~IncidentService() {} Loading Loading @@ -294,6 +309,10 @@ status_t IncidentService::command(FILE* in, FILE* out, FILE* err, Vector<String8 if (!args[0].compare(String8("privacy"))) { return cmd_privacy(in, out, err, args); } if (!args[0].compare(String8("throttler"))) { mThrottler->dump(out); return NO_ERROR; } } return cmd_help(out); } Loading @@ -302,6 +321,9 @@ status_t IncidentService::cmd_help(FILE* out) { fprintf(out, "usage: adb shell cmd incident privacy print <section_id>\n"); fprintf(out, "usage: adb shell cmd incident privacy parse <section_id> < proto.txt\n"); fprintf(out, " Prints/parses for the section id.\n"); fprintf(out, "\n"); fprintf(out, "usage: adb shell cmd incident throttler\n"); fprintf(out, " Prints the current throttler state\n"); return NO_ERROR; } Loading
cmds/incidentd/src/IncidentService.h +6 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ #include <deque> #include <mutex> #include "Throttler.h" using namespace android; using namespace android::base; using namespace android::binder; Loading @@ -49,7 +51,8 @@ private: // ================================================================================ class ReportHandler : public MessageHandler { public: ReportHandler(const sp<Looper>& handlerLooper, const sp<ReportRequestQueue>& queue); ReportHandler(const sp<Looper>& handlerLooper, const sp<ReportRequestQueue>& queue, const sp<Throttler>& throttler); virtual ~ReportHandler(); virtual void handleMessage(const Message& message); Loading @@ -70,6 +73,7 @@ private: nsecs_t mBacklogDelay; sp<Looper> mHandlerLooper; sp<ReportRequestQueue> mQueue; sp<Throttler> mThrottler; /** * Runs all of the reports that have been queued. Loading Loading @@ -109,6 +113,7 @@ public: private: sp<ReportRequestQueue> mQueue; sp<ReportHandler> mHandler; sp<Throttler> mThrottler; /** * Commands print out help. Loading
cmds/incidentd/src/Log.h +0 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ #pragma once #define LOG_TAG "incidentd" #define DEBUG false #include <log/log.h> Loading