blob: 6689939ce80d9b63666839cabe2d74ebf0d35fe9 [file] [log] [blame]
Hector Dearman22f1de52019-06-04 18:11:45 +01001/*
2 * Copyright (C) 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Lalit Maganti9d538bd2020-03-12 23:48:16 +000017#ifndef SRC_TRACE_PROCESSOR_IMPORTERS_GZIP_GZIP_TRACE_PARSER_H_
18#define SRC_TRACE_PROCESSOR_IMPORTERS_GZIP_GZIP_TRACE_PARSER_H_
Hector Dearman22f1de52019-06-04 18:11:45 +010019
Lalit Maganti1534bb72021-04-23 14:11:26 +010020#include "src/trace_processor/importers/common/chunked_trace_reader.h"
Lalit Maganti69216ec2021-05-21 14:10:42 +010021#include "src/trace_processor/util/gzip_utils.h"
Hector Dearman22f1de52019-06-04 18:11:45 +010022
23namespace perfetto {
24namespace trace_processor {
25
26class TraceProcessorContext;
27
28class GzipTraceParser : public ChunkedTraceReader {
29 public:
30 explicit GzipTraceParser(TraceProcessorContext*);
Lalit Maganti9d06f192020-10-02 16:12:58 +010031 explicit GzipTraceParser(std::unique_ptr<ChunkedTraceReader>);
Hector Dearman22f1de52019-06-04 18:11:45 +010032 ~GzipTraceParser() override;
33
34 // ChunkedTraceReader implementation
Primiano Tucci3264b592021-11-08 18:20:51 +000035 util::Status Parse(TraceBlobView) override;
Primiano Tucci40da82f2020-02-13 18:04:35 +000036 void NotifyEndOfFile() override;
Hector Dearman22f1de52019-06-04 18:11:45 +010037
Lalit Maganti9d06f192020-10-02 16:12:58 +010038 util::Status ParseUnowned(const uint8_t*, size_t);
39
40 bool needs_more_input() const { return needs_more_input_; }
Lalit Maganti1caf3492020-09-10 21:00:08 +010041
Hector Dearman22f1de52019-06-04 18:11:45 +010042 private:
43 TraceProcessorContext* const context_;
Lalit Maganti69216ec2021-05-21 14:10:42 +010044 util::GzipDecompressor decompressor_;
Hector Dearman22f1de52019-06-04 18:11:45 +010045 std::unique_ptr<ChunkedTraceReader> inner_;
Lalit Maganti9d06f192020-10-02 16:12:58 +010046
47 std::unique_ptr<uint8_t[]> buffer_;
48 size_t bytes_written_ = 0;
49
50 bool first_chunk_parsed_ = false;
51 bool needs_more_input_ = false;
Hector Dearman22f1de52019-06-04 18:11:45 +010052};
53
54} // namespace trace_processor
55} // namespace perfetto
56
Lalit Maganti9d538bd2020-03-12 23:48:16 +000057#endif // SRC_TRACE_PROCESSOR_IMPORTERS_GZIP_GZIP_TRACE_PARSER_H_