68 lines
1.9 KiB
C++
68 lines
1.9 KiB
C++
/*
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <deque>
|
|
#include <memory>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
|
|
namespace facebook::react::jsinspector_modern {
|
|
|
|
/**
|
|
* Maximum memory size (in bytes) to store buffered text and image request
|
|
* bodies.
|
|
*/
|
|
constexpr size_t REQUEST_BUFFER_MAX_SIZE_BYTES = 100 * 1024 * 1024; // 100MB
|
|
|
|
/**
|
|
* A class to store network response previews keyed by requestId, with a fixed
|
|
* memory limit. Evicts oldest responses when memory is exceeded.
|
|
*/
|
|
class BoundedRequestBuffer {
|
|
public:
|
|
struct ResponseBody {
|
|
std::string data;
|
|
bool base64Encoded;
|
|
};
|
|
|
|
/**
|
|
* Store a response preview with the given requestId and data.
|
|
* If adding the data exceeds the memory limit, removes oldest requests until
|
|
* there is enough space or the buffer is empty.
|
|
* \param requestId Unique identifier for the request.
|
|
* \param data The request preview data (e.g. text or image body).
|
|
* \param base64Encoded True if the data is base64-encoded, false otherwise.
|
|
* \return True if the response body was stored, false otherwise.
|
|
*/
|
|
bool put(
|
|
const std::string& requestId,
|
|
std::string_view data,
|
|
bool base64Encoded) noexcept;
|
|
|
|
/**
|
|
* Retrieve a response preview by requestId.
|
|
* \param requestId The unique identifier for the request.
|
|
* \return A shared pointer to the request data if found, otherwise nullptr.
|
|
*/
|
|
std::shared_ptr<const ResponseBody> get(const std::string& requestId) const;
|
|
|
|
/**
|
|
* Remove all entries from the buffer.
|
|
*/
|
|
void clear();
|
|
|
|
private:
|
|
std::unordered_map<std::string, std::shared_ptr<const ResponseBody>>
|
|
responses_;
|
|
std::deque<std::string> order_;
|
|
size_t currentSize_ = 0;
|
|
};
|
|
|
|
} // namespace facebook::react::jsinspector_modern
|