summaryrefslogtreecommitdiffstats
path: root/chrome/browser/prerender/prerender_final_status.cc
blob: 8d71e41a6768a047dce88cae8ebdfbec53eda4fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/prerender/prerender_final_status.h"

#include "base/metrics/histogram.h"
#include "chrome/browser/prerender/prerender_manager.h"

namespace prerender {

namespace {

const char* kFinalStatusNames[] = {
  "Used",
  "Timed Out",
  "Evicted",
  "Manager Shutdown",
  "Closed",
  "Create New Window",
  "Profile Destroyed",
  "App Terminating",
  "Javascript Alert",
  "Auth Needed",
  "HTTPS",
  "Download",
  "Memory Limit Exceeded",
  "JS Out Of Memory",
  "Renderer Unresponsive",
  "Too many processes",
  "Rate Limit Exceeded",
  "Pending Skipped",
  "Control Group",
  "HTML5 Media",
  "Source Render View Closed",
  "Renderer Crashed",
  "Unsupported Scheme",
  "Invalid HTTP Method",
  "window.print",
  "Recently Visited",
  "window.opener",
  "Page ID Conflict",
  "Safe Browsing",
  "Fragment Mismatch",
  "SSL Client Certificate Requested",
  "Cache or History Cleared",
  "Max",
};
COMPILE_ASSERT(arraysize(kFinalStatusNames) == FINAL_STATUS_MAX + 1,
               PrerenderFinalStatus_name_count_mismatch);

}

void RecordFinalStatus(FinalStatus final_status) {
  DCHECK(final_status != FINAL_STATUS_MAX);
  // FINAL_STATUS_CONTROL_GROUP indicates that the PrerenderContents
  // was created only to measure "would-have-been-prerendered" for
  // control group measurements. Don't pollute data with it.
  if (PrerenderManager::IsControlGroup() ||
      final_status == FINAL_STATUS_CONTROL_GROUP)
    return;
  UMA_HISTOGRAM_ENUMERATION("Prerender.FinalStatus",
                            final_status,
                            FINAL_STATUS_MAX);
}

const char* NameFromFinalStatus(FinalStatus final_status) {
  DCHECK(static_cast<int>(final_status) >= 0 &&
         static_cast<int>(final_status) <= FINAL_STATUS_MAX);
  return kFinalStatusNames[final_status];
}

}  // namespace prerender