[vulkan] Add counting stream

bug: 111137294

Great for figuring out byte sizes while still
using the same stream-like interface.

Change-Id: Iae328eb2531b271f68592d2745f4a19acb317b97
diff --git a/system/vulkan_enc/VulkanStream.cpp b/system/vulkan_enc/VulkanStream.cpp
index 33cbf90..14c4cca 100644
--- a/system/vulkan_enc/VulkanStream.cpp
+++ b/system/vulkan_enc/VulkanStream.cpp
@@ -145,4 +145,22 @@
     return mImpl->write(buffer, size);
 }
 
+VulkanCountingStream::VulkanCountingStream() : VulkanStream(nullptr) { }
+VulkanCountingStream::~VulkanCountingStream() = default;
+
+ssize_t VulkanCountingStream::read(void *buffer, size_t size) {
+    m_read += size;
+    return size;
+}
+
+ssize_t VulkanCountingStream::write(const void *buffer, size_t size) {
+    m_written += size;
+    return size;
+}
+
+void VulkanCountingStream::rewind() {
+    m_written = 0;
+    m_read = 0;
+}
+
 } // namespace goldfish_vk
\ No newline at end of file
diff --git a/system/vulkan_enc/VulkanStream.h b/system/vulkan_enc/VulkanStream.h
index 21b08f0..99f88ab 100644
--- a/system/vulkan_enc/VulkanStream.h
+++ b/system/vulkan_enc/VulkanStream.h
@@ -46,4 +46,21 @@
     std::unique_ptr<Impl> mImpl;
 };
 
+class VulkanCountingStream : public VulkanStream {
+public:
+    VulkanCountingStream();
+    ~VulkanCountingStream();
+
+    ssize_t read(void *buffer, size_t size) override;
+    ssize_t write(const void *buffer, size_t size) override;
+
+    size_t bytesWritten() const { return m_written; }
+    size_t bytesRead() const { return m_read; }
+
+    void rewind();
+private:
+    size_t m_written = 0;
+    size_t m_read = 0;
+};
+
 } // namespace goldfish_vk
\ No newline at end of file