| Index: components/browser_watcher/watcher_metrics_provider_win.cc
|
| diff --git a/components/browser_watcher/watcher_metrics_provider_win.cc b/components/browser_watcher/watcher_metrics_provider_win.cc
|
| index 9ef6e6c53d2d81ca981f12e6a414dc2d1633566a..53fb44f22c1efaac3cdb3c93087b9348087be71c 100644
|
| --- a/components/browser_watcher/watcher_metrics_provider_win.cc
|
| +++ b/components/browser_watcher/watcher_metrics_provider_win.cc
|
| @@ -32,15 +32,15 @@ void CompileAsserts() {
|
| // with the given PID is not the same process the data was recorded for.
|
| // This doesn't matter for the purpose, as eventually the data will be
|
| // scavenged and reported.
|
| -bool IsDeadProcess(base::StringPiece16 key_name) {
|
| +bool IsDeadProcess(base::StringPiece16 key_or_value_name) {
|
| // Truncate the input string to the first occurrence of '-', if one exists.
|
| - size_t num_end = key_name.find(L'-');
|
| + size_t num_end = key_or_value_name.find(L'-');
|
| if (num_end != base::StringPiece16::npos)
|
| - key_name = key_name.substr(0, num_end);
|
| + key_or_value_name = key_or_value_name.substr(0, num_end);
|
|
|
| // Convert to the numeric PID.
|
| int pid = 0;
|
| - if (!base::StringToInt(key_name, &pid) || pid == 0)
|
| + if (!base::StringToInt(key_or_value_name, &pid) || pid == 0)
|
| return true;
|
|
|
| // This is a very inexpensive check for the common case of our own PID.
|
| @@ -194,8 +194,11 @@ void RecordExitFunnels(const base::string16& registry_path) {
|
|
|
| std::vector<base::string16> to_delete;
|
| for (; it.Valid(); ++it) {
|
| - RecordSingleExitFunnel(&key, it.Name());
|
| - to_delete.push_back(it.Name());
|
| + // Defer reporting on still-live processes.
|
| + if (IsDeadProcess(it.Name())) {
|
| + RecordSingleExitFunnel(&key, it.Name());
|
| + to_delete.push_back(it.Name());
|
| + }
|
| }
|
|
|
| for (size_t i = 0; i < to_delete.size(); ++i) {
|
|
|