diff options
Diffstat (limited to 'cmds/dumpstate/dumpstate.h')
-rw-r--r-- | cmds/dumpstate/dumpstate.h | 95 |
1 files changed, 33 insertions, 62 deletions
diff --git a/cmds/dumpstate/dumpstate.h b/cmds/dumpstate/dumpstate.h index 83e6787ebf..0d25d307a6 100644 --- a/cmds/dumpstate/dumpstate.h +++ b/cmds/dumpstate/dumpstate.h @@ -35,8 +35,6 @@ #include <ziparchive/zip_writer.h> #include "DumpstateUtil.h" -#include "DumpPool.h" -#include "TaskQueue.h" // Workaround for const char *args[MAX_ARGS_ARRAY_SIZE] variables until they're converted to // std::vector<std::string> @@ -54,7 +52,6 @@ namespace dumpstate { class DumpstateTest; class ProgressTest; -class ZippedBugReportStreamTest; } // namespace dumpstate } // namespace os @@ -78,7 +75,7 @@ extern "C" { class DurationReporter { public: explicit DurationReporter(const std::string& title, bool logcat_only = false, - bool verbose = false, int duration_fd = STDOUT_FILENO); + bool verbose = false); ~DurationReporter(); @@ -87,7 +84,6 @@ class DurationReporter { bool logcat_only_; bool verbose_; uint64_t started_; - int duration_fd_; DISALLOW_COPY_AND_ASSIGN(DurationReporter); }; @@ -197,8 +193,7 @@ struct DumpData { * that are spread accross utils.cpp and dumpstate.cpp will be moved to it. */ class Dumpstate { - friend class android::os::dumpstate::DumpstateTest; - friend class android::os::dumpstate::ZippedBugReportStreamTest; + friend class DumpstateTest; public: enum RunStatus { OK, HELP, INVALID_INPUT, ERROR, USER_CONSENT_DENIED, USER_CONSENT_TIMED_OUT }; @@ -232,13 +227,11 @@ class Dumpstate { * |full_command| array containing the command (first entry) and its arguments. * Must contain at least one element. * |options| optional argument defining the command's behavior. - * |out_fd| A fd to support the DumpPool to output results to a temporary - * file. Using STDOUT_FILENO if it's not running in the parallel task. */ int RunCommand(const std::string& title, const std::vector<std::string>& fullCommand, const android::os::dumpstate::CommandOptions& options = android::os::dumpstate::CommandOptions::DEFAULT, - bool verbose_duration = false, int out_fd = STDOUT_FILENO); + bool verbose_duration = false); /* * Runs `dumpsys` with the given arguments, automatically setting its timeout @@ -251,12 +244,10 @@ class Dumpstate { * |options| optional argument defining the command's behavior. * |dumpsys_timeout| when > 0, defines the value passed to `dumpsys -T` (otherwise it uses the * timeout from `options`) - * |out_fd| A fd to support the DumpPool to output results to a temporary - * file. Using STDOUT_FILENO if it's not running in the parallel task. */ void RunDumpsys(const std::string& title, const std::vector<std::string>& dumpsys_args, const android::os::dumpstate::CommandOptions& options = DEFAULT_DUMPSYS, - long dumpsys_timeout_ms = 0, int out_fd = STDOUT_FILENO); + long dumpsys_timeout_ms = 0); /* * Prints the contents of a file. @@ -313,12 +304,7 @@ class Dumpstate { // Returns OK in all other cases. RunStatus DumpTraces(const char** path); - /* - * |out_fd| A fd to support the DumpPool to output results to a temporary file. - * Dumpstate can pick up later and output to the bugreport. Using STDOUT_FILENO - * if it's not running in the parallel task. - */ - void DumpstateBoard(int out_fd = STDOUT_FILENO); + void DumpstateBoard(); /* * Updates the overall progress of the bugreport generation by the given weight increment. @@ -375,30 +361,20 @@ class Dumpstate { bool CalledByApi() const; /* - * Enqueues a task to the dumpstate's TaskQueue if the parallel run is enabled, - * otherwise invokes it immediately. The task adds file at path entry_path - * as a zip file entry with name entry_name. Unlinks entry_path when done. - * - * All enqueued tasks will be executed in the dumpstate's FinishZipFile method - * before the zip file is finished. Tasks will be cancelled in dumpstate's - * ShutdownDumpPool method if they have never been called. - */ - void EnqueueAddZipEntryAndCleanupIfNeeded(const std::string& entry_name, - const std::string& entry_path); - - /* * Structure to hold options that determine the behavior of dumpstate. */ struct DumpOptions { + bool do_add_date = false; + bool do_zip_file = false; bool do_vibrate = true; - // Writes bugreport zipped file to a socket. - bool stream_to_socket = false; - // Writes generation progress updates to a socket. - bool progress_updates_to_socket = false; + // Writes bugreport content to a socket; only flatfile format is supported. + bool use_socket = false; + bool use_control_socket = false; bool do_screenshot = false; bool is_screenshot_copied = false; bool is_remote_mode = false; bool show_header_only = false; + bool do_start_service = false; bool telephony_only = false; bool wifi_only = false; // Trimmed-down version of dumpstate to only include whitelisted logs. @@ -435,6 +411,13 @@ class Dumpstate { /* Returns true if the options set so far are consistent. */ bool ValidateOptions() const; + /* Returns if options specified require writing bugreport to a file */ + bool OutputToFile() const { + // If we are not writing to socket, we will write to a file. If bugreport_fd is + // specified, it is preferred. If not bugreport is written to /bugreports. + return !use_socket; + } + /* Returns if options specified require writing to custom file location */ bool OutputToCustomFile() { // Custom location is only honored in limited mode. @@ -458,15 +441,9 @@ class Dumpstate { // Whether it should take an screenshot earlier in the process. bool do_early_screenshot_ = false; - // This is set to true when the trace snapshot request in the early call to - // MaybeSnapshotSystemTrace(). When this is true, the later stages of - // dumpstate will append the trace to the zip archive. - bool has_system_trace_ = false; - std::unique_ptr<Progress> progress_; - // When set, defines a socket file-descriptor use to report progress to bugreportz - // or to stream the zipped file to. + // When set, defines a socket file-descriptor use to report progress to bugreportz. int control_socket_fd_ = -1; // Bugreport format version; @@ -478,8 +455,8 @@ class Dumpstate { // `bugreport-BUILD_ID`. std::string base_name_; - // Name is the suffix part of the bugreport files - it's typically the date, - // but it could be changed by the user.. + // Name is the suffix part of the bugreport files - it's typically the date (when invoked with + // `-d`), but it could be changed by the user.. std::string name_; std::string bugreport_internal_dir_ = DUMPSTATE_DIRECTORY; @@ -513,13 +490,6 @@ class Dumpstate { // List of open ANR dump files. std::vector<DumpData> anr_data_; - // A thread pool to execute dump tasks simultaneously if the parallel run is enabled. - std::unique_ptr<android::os::dumpstate::DumpPool> dump_pool_; - - // A task queue to collect adding zip entry tasks inside dump tasks if the - // parallel run is enabled. - std::unique_ptr<android::os::dumpstate::TaskQueue> zip_entry_tasks_; - // A callback to IncidentCompanion service, which checks user consent for sharing the // bugreport with the calling app. If the user has not responded yet to the dialog it will // be neither confirmed nor denied. @@ -548,10 +518,9 @@ class Dumpstate { RunStatus DumpstateDefaultAfterCritical(); void MaybeTakeEarlyScreenshot(); - void MaybeSnapshotSystemTrace(); - void MaybeSnapshotWinTrace(); - void onUiIntensiveBugreportDumpsFinished(int32_t calling_uid); + void onUiIntensiveBugreportDumpsFinished(int32_t calling_uid, + const std::string& calling_package); void MaybeCheckUserConsent(int32_t calling_uid, const std::string& calling_package); @@ -559,25 +528,17 @@ class Dumpstate { // but leaves the log file alone. void CleanupTmpFiles(); - // Create the thread pool to enable the parallel run function. - void EnableParallelRunIfNeeded(); - void ShutdownDumpPool(); - RunStatus HandleUserConsentDenied(); // Copies bugreport artifacts over to the caller's directories provided there is user consent or // called by Shell. RunStatus CopyBugreportIfUserConsented(int32_t calling_uid); - std::function<int(const char *)> open_socket_fn_; - // Used by GetInstance() only. explicit Dumpstate(const std::string& version = VERSION_CURRENT); android::sp<ConsentCallback> consent_callback_; - std::recursive_mutex mutex_; - DISALLOW_COPY_AND_ASSIGN(Dumpstate); }; @@ -604,6 +565,16 @@ int dump_file_from_fd(const char *title, const char *path, int fd); int dump_files(const std::string& title, const char* dir, bool (*skip)(const char* path), int (*dump_from_fd)(const char* title, const char* path, int fd)); +/** opens a socket and returns its file descriptor */ +int open_socket(const char *service); + +/* + * Redirects 'redirect' to a service control socket. + * + * Returns true if redirect succeeds. + */ +bool redirect_to_socket(FILE* redirect, const char* service); + /* * Redirects 'redirect' to a file indicated by 'path', truncating it. * |