1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef SYNC_INTERNAL_API_PROTOCOL_EVENT_BUFFER_H_ 6 #define SYNC_INTERNAL_API_PROTOCOL_EVENT_BUFFER_H_ 7 8 #include <deque> 9 10 #include "base/memory/scoped_vector.h" 11 #include "sync/base/sync_export.h" 12 13 namespace syncer { 14 15 class ProtocolEvent; 16 17 // A container for ProtocolEvents. 18 // 19 // Stores at most kBufferSize events, then starts dropping the oldest events. 20 class SYNC_EXPORT_PRIVATE ProtocolEventBuffer { 21 public: 22 static const size_t kBufferSize; 23 24 ProtocolEventBuffer(); 25 ~ProtocolEventBuffer(); 26 27 // Records an event. May cause the oldest event to be dropped. 28 void RecordProtocolEvent(const ProtocolEvent& event); 29 30 // Returns the buffered contents. Will not clear the buffer. 31 ScopedVector<ProtocolEvent> GetBufferedProtocolEvents() const; 32 33 private: 34 std::deque<ProtocolEvent*> buffer_; 35 STLElementDeleter<std::deque<ProtocolEvent*> > buffer_deleter_; 36 37 DISALLOW_COPY_AND_ASSIGN(ProtocolEventBuffer); 38 }; 39 40 } // namespace syncer 41 42 #endif // SYNC_INTERNAL_API_PROTOCOL_EVENT_BUFFER_H_ 43