1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_PERFORMANCE_MONITOR_EVENT_H_
6#define CHROME_BROWSER_PERFORMANCE_MONITOR_EVENT_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "base/time/time.h"
10#include "base/values.h"
11
12namespace performance_monitor {
13
14// IMPORTANT: To add new events, please
15// - Place the new event above EVENT_NUMBER_OF_EVENTS.
16// - Add a member to the EventKeyChar enum in key_builder.cc.
17// - Add the appropriate messages in generated_resources.grd.
18// - Add the appropriate functions in
19//   chrome/browser/ui/webui/performance_monitor/performance_monitor_l10n.h.
20enum EventType {
21  EVENT_UNDEFINED,
22
23  // Extension-Related events
24  EVENT_EXTENSION_INSTALL,
25  EVENT_EXTENSION_UNINSTALL,
26  EVENT_EXTENSION_UPDATE,
27  EVENT_EXTENSION_ENABLE,
28  EVENT_EXTENSION_DISABLE,
29
30  // Chrome's version has changed.
31  EVENT_CHROME_UPDATE,
32
33  // Renderer-Failure related events; these correspond to the RENDERER_HANG
34  // event, and the two termination statuses ABNORMAL_EXIT and PROCESS_KILLED,
35  // respectively.
36  EVENT_RENDERER_HANG,
37  EVENT_RENDERER_CRASH,
38  EVENT_RENDERER_KILLED,
39
40  // Chrome did not shut down correctly.
41  EVENT_UNCLEAN_EXIT,
42
43  EVENT_NUMBER_OF_EVENTS
44};
45
46const char* EventTypeToString(EventType event_type);
47
48// The wrapper class for the JSON-generated event classes for the performance
49// monitor. This class is used so we can pass around events in a single class,
50// rather than having a variety of different types (since JSON does not
51// currently support inheritance). Since the class will occasionally need to
52// be compared against other events, we construct it with type and time. Other
53// information should not be needed commonly, and is stored in a JSON-generated
54// DictionaryValue.
55class Event {
56 public:
57  Event(const EventType& type,
58        const base::Time& time,
59        scoped_ptr<base::DictionaryValue> data);
60  virtual ~Event();
61
62  // Construct an event from the given DictionaryValue; takes ownership of
63  // |data|.
64  static scoped_ptr<Event> FromValue(scoped_ptr<base::DictionaryValue> data);
65
66  // Accessors
67  EventType type() const { return type_; }
68  base::Time time() const { return time_; }
69  base::DictionaryValue* data() const { return data_.get(); }
70
71 private:
72
73  // The type of the event.
74  EventType type_;
75  // The time at which the event was recorded.
76  base::Time time_;
77  // The full JSON-generated value representing the information of the event;
78  // these data are described in chrome/browser/performance_monitor/events.json.
79  scoped_ptr<base::DictionaryValue> data_;
80};
81
82}  // namespace performance_monitor
83
84#endif  // CHROME_BROWSER_PERFORMANCE_MONITOR_EVENT_H_
85