1e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// found in the LICENSE file. 4e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 5e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "sync/internal_api/protocol_event_buffer.h" 6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "sync/internal_api/public/events/protocol_event.h" 8e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace syncer { 10e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochconst size_t ProtocolEventBuffer::kBufferSize = 6; 12e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 13e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochProtocolEventBuffer::ProtocolEventBuffer() 14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch : buffer_deleter_(&buffer_) {} 15e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochProtocolEventBuffer::~ProtocolEventBuffer() {} 17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid ProtocolEventBuffer::RecordProtocolEvent(const ProtocolEvent& event) { 19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch buffer_.push_back(event.Clone().release()); 20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (buffer_.size() > kBufferSize) { 21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ProtocolEvent* to_delete = buffer_.front(); 22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch buffer_.pop_front(); 23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch delete to_delete; 24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochScopedVector<ProtocolEvent> 28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochProtocolEventBuffer::GetBufferedProtocolEvents() const { 29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ScopedVector<ProtocolEvent> ret; 30e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch for (std::deque<ProtocolEvent*>::const_iterator it = buffer_.begin(); 31e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch it != buffer_.end(); ++it) { 32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ret.push_back((*it)->Clone().release()); 33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 34e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch return ret.Pass(); 35e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 37e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} // namespace syncer 38