Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: third_party/crashpad/crashpad/minidump/minidump_crashpad_info_writer.cc

Issue 1505213004: Copy Crashpad into the Chrome tree instead of importing it via DEPS (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review comments, update README.chromium Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Crashpad Authors. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "minidump/minidump_crashpad_info_writer.h"
16
17 #include "base/logging.h"
18 #include "minidump/minidump_module_crashpad_info_writer.h"
19 #include "minidump/minidump_simple_string_dictionary_writer.h"
20 #include "snapshot/process_snapshot.h"
21 #include "util/file/file_writer.h"
22 #include "util/stdlib/move.h"
23
24 namespace crashpad {
25
26 MinidumpCrashpadInfoWriter::MinidumpCrashpadInfoWriter()
27 : MinidumpStreamWriter(),
28 crashpad_info_(),
29 simple_annotations_(nullptr),
30 module_list_(nullptr) {
31 crashpad_info_.version = MinidumpCrashpadInfo::kVersion;
32 }
33
34 MinidumpCrashpadInfoWriter::~MinidumpCrashpadInfoWriter() {
35 }
36
37 void MinidumpCrashpadInfoWriter::InitializeFromSnapshot(
38 const ProcessSnapshot* process_snapshot) {
39 DCHECK_EQ(state(), kStateMutable);
40 DCHECK(!module_list_);
41
42 UUID report_id;
43 process_snapshot->ReportID(&report_id);
44 SetReportID(report_id);
45
46 UUID client_id;
47 process_snapshot->ClientID(&client_id);
48 SetClientID(client_id);
49
50 auto simple_annotations =
51 make_scoped_ptr(new MinidumpSimpleStringDictionaryWriter());
52 simple_annotations->InitializeFromMap(
53 process_snapshot->AnnotationsSimpleMap());
54 if (simple_annotations->IsUseful()) {
55 SetSimpleAnnotations(crashpad::move(simple_annotations));
56 }
57
58 auto modules = make_scoped_ptr(new MinidumpModuleCrashpadInfoListWriter());
59 modules->InitializeFromSnapshot(process_snapshot->Modules());
60
61 if (modules->IsUseful()) {
62 SetModuleList(crashpad::move(modules));
63 }
64 }
65
66 void MinidumpCrashpadInfoWriter::SetReportID(const UUID& report_id) {
67 DCHECK_EQ(state(), kStateMutable);
68
69 crashpad_info_.report_id = report_id;
70 }
71
72 void MinidumpCrashpadInfoWriter::SetClientID(const UUID& client_id) {
73 DCHECK_EQ(state(), kStateMutable);
74
75 crashpad_info_.client_id = client_id;
76 }
77
78 void MinidumpCrashpadInfoWriter::SetSimpleAnnotations(
79 scoped_ptr<MinidumpSimpleStringDictionaryWriter> simple_annotations) {
80 DCHECK_EQ(state(), kStateMutable);
81
82 simple_annotations_ = crashpad::move(simple_annotations);
83 }
84
85 void MinidumpCrashpadInfoWriter::SetModuleList(
86 scoped_ptr<MinidumpModuleCrashpadInfoListWriter> module_list) {
87 DCHECK_EQ(state(), kStateMutable);
88
89 module_list_ = crashpad::move(module_list);
90 }
91
92 bool MinidumpCrashpadInfoWriter::Freeze() {
93 DCHECK_EQ(state(), kStateMutable);
94
95 if (!MinidumpStreamWriter::Freeze()) {
96 return false;
97 }
98
99 if (simple_annotations_) {
100 simple_annotations_->RegisterLocationDescriptor(
101 &crashpad_info_.simple_annotations);
102 }
103 if (module_list_) {
104 module_list_->RegisterLocationDescriptor(&crashpad_info_.module_list);
105 }
106
107 return true;
108 }
109
110 size_t MinidumpCrashpadInfoWriter::SizeOfObject() {
111 DCHECK_GE(state(), kStateFrozen);
112
113 return sizeof(crashpad_info_);
114 }
115
116 std::vector<internal::MinidumpWritable*>
117 MinidumpCrashpadInfoWriter::Children() {
118 DCHECK_GE(state(), kStateFrozen);
119
120 std::vector<MinidumpWritable*> children;
121 if (simple_annotations_) {
122 children.push_back(simple_annotations_.get());
123 }
124 if (module_list_) {
125 children.push_back(module_list_.get());
126 }
127
128 return children;
129 }
130
131 bool MinidumpCrashpadInfoWriter::WriteObject(FileWriterInterface* file_writer) {
132 DCHECK_EQ(state(), kStateWritable);
133
134 return file_writer->Write(&crashpad_info_, sizeof(crashpad_info_));
135 }
136
137 MinidumpStreamType MinidumpCrashpadInfoWriter::StreamType() const {
138 return kMinidumpStreamTypeCrashpadInfo;
139 }
140
141 bool MinidumpCrashpadInfoWriter::IsUseful() const {
142 return crashpad_info_.report_id != UUID() ||
143 crashpad_info_.client_id != UUID() ||
144 simple_annotations_ ||
145 module_list_;
146 }
147
148 } // namespace crashpad
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698