Chromium Code Reviews| Index: chrome/profiling/memlog_stream_parser.h |
| diff --git a/chrome/profiling/memlog_stream_parser.h b/chrome/profiling/memlog_stream_parser.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ad44060178eed18af6d105619844291a882f880d |
| --- /dev/null |
| +++ b/chrome/profiling/memlog_stream_parser.h |
| @@ -0,0 +1,62 @@ |
| +// Copyright 2017 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. |
| + |
| +#ifndef CHROME_PROFILING_MEMLOG_STREAM_PARSER_H_ |
| +#define CHROME_PROFILING_MEMLOG_STREAM_PARSER_H_ |
| + |
| +#include <vector> |
| + |
| +#include "base/macros.h" |
| +#include "chrome/profiling/memlog_receiver.h" |
| +#include "chrome/profiling/memlog_stream_receiver.h" |
| + |
| +namespace profiling { |
| + |
| +// Parses a memory stream. Refcounted via StreamReceiver. |
| +class MemlogStreamParser : public MemlogStreamReceiver { |
| + public: |
| + // Receiver must outlive this class. |
| + explicit MemlogStreamParser(MemlogReceiver* receiver); |
| + ~MemlogStreamParser(); |
|
awong
2017/06/19 20:00:13
virtual?
brettw
2017/06/19 23:29:46
I added override.
|
| + |
| + // StreamReceiver implementation. |
| + void OnStreamData(std::unique_ptr<char[]> data, size_t sz) override; |
| + void OnStreamComplete() override; |
| + |
| + private: |
| + struct Block; |
| + |
| + enum ReadStatus { |
| + READ_OK, // Read OK. |
| + READ_ERROR, // Fatal error, don't send more data. |
| + READ_NO_DATA // Not enough data, try again when we get more |
| + }; |
| + |
| + // Returns true if the given number of bytes are available now. |
| + bool AreBytesAvailable(size_t count) const; |
| + |
| + // Returns false if not enough bytes are available. |
| + bool PeekBytes(size_t count, void* dest) const; |
|
awong
2017/06/19 21:51:27
Why are these taking void* instead of char*?
brettw
2017/06/19 23:29:46
It's normal for file read functions to take void*
|
| + bool ReadBytes(size_t count, void* dest); |
| + void ConsumeBytes(size_t count); // Bytes must be available. |
| + |
| + ReadStatus ParseHeader(); |
| + ReadStatus ParseAlloc(); |
| + ReadStatus ParseFree(); |
| + |
| + MemlogReceiver* receiver_; // Unowned. |
|
awong
2017/06/19 20:00:13
nit: Unowned -> Not owned.
brettw
2017/06/19 23:29:46
Done.
|
| + |
| + std::vector<Block> blocks_; |
| + |
| + bool received_header_ = false; |
| + |
| + // Current offset into blocks_[0] of the next packet to process. |
| + size_t block_zero_offset_ = 0; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(MemlogStreamParser); |
| +}; |
| + |
| +} // namespace profiling |
| + |
| +#endif // CHROME_PROFILING_MEMLOG_STREAM_PARSER_H_ |