File: session_service_log.h

package info (click to toggle)
chromium 138.0.7204.183-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,080,960 kB
  • sloc: cpp: 34,937,079; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,954; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,811; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (142 lines) | stat: -rw-r--r-- 4,667 bytes parent folder | download | duplicates (6)
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_SESSIONS_SESSION_SERVICE_LOG_H_
#define CHROME_BROWSER_SESSIONS_SESSION_SERVICE_LOG_H_

#include <list>

#include "base/time/time.h"

class Profile;

namespace user_prefs {
class PrefRegistrySyncable;
}

// This file contains functionality used to track interesting session restore
// events. This is primarily aimed at helping understand whether session
// restore is failing.
//
// The appropriate code calls to the various log functions. This data is
// tracked in prefs, and only a limited amount of data is kept around.

// WARNING: these values are persisted to disk, do not change.
enum class SessionServiceEventLogType {
  // The profile was started.
  kStart = 0,

  // A restore was triggered. Restore may be triggered more than once after
  // a start.
  kRestore = 1,

  // The profile was shut down. It's still possible for a crash to happen
  // after this. This is not logged if a crash happens before exit is attempted.
  kExit = 2,

  // An error in writing the file occurred. Multiple calls to AddEvent()
  // when the last event is a error result in combining the event (this is
  // done to ensure lots of write error don't spam the event log).
  kWriteError = 3,

  // Restore stopped because the Browser restore was going to restore to closed.
  kRestoreCanceled = 4,

  // A restore was initiated, meaning the browser will ask SessionService for
  // the data to restore asynchronously.
  kRestoreInitiated = 5,

  kMinValue = kStart,
  kMaxValue = kRestoreInitiated,
};

struct StartData {
  // Whether the last run of chrome crashed.
  bool did_last_session_crash;
};

struct RestoreData {
  // The number of windows restored.
  int window_count;

  // The number of tabs restored.
  int tab_count;

  // Whether there was an error in reading the file contents.
  bool encountered_error_reading;
};

struct ExitData {
  // The number of windows open at the time of exit.
  int window_count;

  // The total number of tabs open at the time of exit.
  int tab_count;

  // True if this the first SessionService created for the Profile. False
  // means the first SessionService was destroyed and a new one created.
  bool is_first_session_service;

  // True if at least one command was scheduled
  bool did_schedule_command;
};

struct WriteErrorData {
  // Number of write errors that occurred.
  int error_count;
  // Number of write errors that were unrecoverable. See SessionService for
  // details on this.
  int unrecoverable_error_count;
};

struct RestoreInitiatedData {
  bool synchronous;
  bool restore_browser;
};

union EventData {
  StartData start;
  RestoreData restore;
  ExitData exit;
  WriteErrorData write_error;
  RestoreInitiatedData restore_initiated;
};

struct SessionServiceEvent {
  SessionServiceEventLogType type;
  base::Time time;
  EventData data;
};

// Returns the most recent events, ordered with oldest event first. In general
// the times shouldn't be compared, as it's possible for bad clocks and/or
// timezone changes to cause an earlier event to have a later time.
std::list<SessionServiceEvent> GetSessionServiceEvents(Profile* profile);

void LogSessionServiceStartEvent(Profile* profile, bool after_crash);
void LogSessionServiceExitEvent(Profile* profile,
                                int window_count,
                                int tab_count,
                                bool is_first_session_service,
                                bool did_schedule_command);
void LogSessionServiceRestoreInitiatedEvent(Profile* profile,
                                            bool synchronous,
                                            bool restore_browser);
void LogSessionServiceRestoreEvent(Profile* profile,
                                   int window_count,
                                   int tab_count,
                                   bool encountered_error_reading);
void LogSessionServiceRestoreCanceledEvent(Profile* profile);
void LogSessionServiceWriteErrorEvent(Profile* profile,
                                      bool unrecoverable_write_error);
void RemoveLastSessionServiceEventOfType(Profile* profile,
                                         SessionServiceEventLogType type);

void RegisterSessionServiceLogProfilePrefs(
    user_prefs::PrefRegistrySyncable* registry);

// This function is used internally, and is generally only exposed for testing.
void LogSessionServiceEvent(Profile* profile, const SessionServiceEvent& event);

#endif  // CHROME_BROWSER_SESSIONS_SESSION_SERVICE_LOG_H_