| Index: modules/audio_conference_mixer/source/memory_pool_win.h
|
| diff --git a/modules/audio_conference_mixer/source/memory_pool_win.h b/modules/audio_conference_mixer/source/memory_pool_win.h
|
| deleted file mode 100644
|
| index cce38aa24271aaa1cd8c3f0e7a246beb06675a3b..0000000000000000000000000000000000000000
|
| --- a/modules/audio_conference_mixer/source/memory_pool_win.h
|
| +++ /dev/null
|
| @@ -1,199 +0,0 @@
|
| -/*
|
| - * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license
|
| - * that can be found in the LICENSE file in the root of the source
|
| - * tree. An additional intellectual property rights grant can be found
|
| - * in the file PATENTS. All contributing project authors may
|
| - * be found in the AUTHORS file in the root of the source tree.
|
| - */
|
| -
|
| -#ifndef MODULES_AUDIO_CONFERENCE_MIXER_SOURCE_MEMORY_POOL_WINDOWS_H_
|
| -#define MODULES_AUDIO_CONFERENCE_MIXER_SOURCE_MEMORY_POOL_WINDOWS_H_
|
| -
|
| -#include <assert.h>
|
| -#include <windows.h>
|
| -
|
| -#include "system_wrappers/include/aligned_malloc.h"
|
| -#include "system_wrappers/include/atomic32.h"
|
| -#include "typedefs.h" // NOLINT(build/include)
|
| -
|
| -namespace webrtc {
|
| -template<class MemoryType> struct MemoryPoolItem;
|
| -
|
| -template<class MemoryType>
|
| -struct MemoryPoolItemPayload
|
| -{
|
| - MemoryPoolItemPayload()
|
| - : memoryType(),
|
| - base(NULL)
|
| - {
|
| - }
|
| - MemoryType memoryType;
|
| - MemoryPoolItem<MemoryType>* base;
|
| -};
|
| -
|
| -template<class MemoryType>
|
| -struct MemoryPoolItem
|
| -{
|
| - // Atomic single linked list entry header.
|
| - SLIST_ENTRY itemEntry;
|
| - // Atomic single linked list payload.
|
| - MemoryPoolItemPayload<MemoryType>* payload;
|
| -};
|
| -
|
| -template<class MemoryType>
|
| -class MemoryPoolImpl
|
| -{
|
| -public:
|
| - // MemoryPool functions.
|
| - int32_t PopMemory(MemoryType*& memory);
|
| - int32_t PushMemory(MemoryType*& memory);
|
| -
|
| - MemoryPoolImpl(int32_t /*initialPoolSize*/);
|
| - ~MemoryPoolImpl();
|
| -
|
| - // Atomic functions.
|
| - int32_t Terminate();
|
| - bool Initialize();
|
| -private:
|
| - // Non-atomic function.
|
| - MemoryPoolItem<MemoryType>* CreateMemory();
|
| -
|
| - // Windows implementation of single linked atomic list, documented here:
|
| - // http://msdn.microsoft.com/en-us/library/ms686962(VS.85).aspx
|
| -
|
| - // Atomic single linked list head.
|
| - PSLIST_HEADER _pListHead;
|
| -
|
| - Atomic32 _createdMemory;
|
| - Atomic32 _outstandingMemory;
|
| -};
|
| -
|
| -template<class MemoryType>
|
| -MemoryPoolImpl<MemoryType>::MemoryPoolImpl(
|
| - int32_t /*initialPoolSize*/)
|
| - : _pListHead(NULL),
|
| - _createdMemory(0),
|
| - _outstandingMemory(0)
|
| -{
|
| -}
|
| -
|
| -template<class MemoryType>
|
| -MemoryPoolImpl<MemoryType>::~MemoryPoolImpl()
|
| -{
|
| - Terminate();
|
| - if(_pListHead != NULL)
|
| - {
|
| - AlignedFree(reinterpret_cast<void*>(_pListHead));
|
| - _pListHead = NULL;
|
| - }
|
| - // Trigger assert if there is outstanding memory.
|
| - assert(_createdMemory.Value() == 0);
|
| - assert(_outstandingMemory.Value() == 0);
|
| -}
|
| -
|
| -template<class MemoryType>
|
| -int32_t MemoryPoolImpl<MemoryType>::PopMemory(MemoryType*& memory)
|
| -{
|
| - PSLIST_ENTRY pListEntry = InterlockedPopEntrySList(_pListHead);
|
| - if(pListEntry == NULL)
|
| - {
|
| - MemoryPoolItem<MemoryType>* item = CreateMemory();
|
| - if(item == NULL)
|
| - {
|
| - return -1;
|
| - }
|
| - pListEntry = &(item->itemEntry);
|
| - }
|
| - ++_outstandingMemory;
|
| - memory = &((MemoryPoolItem<MemoryType>*)pListEntry)->payload->memoryType;
|
| - return 0;
|
| -}
|
| -
|
| -template<class MemoryType>
|
| -int32_t MemoryPoolImpl<MemoryType>::PushMemory(MemoryType*& memory)
|
| -{
|
| - if(memory == NULL)
|
| - {
|
| - return -1;
|
| - }
|
| -
|
| - MemoryPoolItem<MemoryType>* item =
|
| - ((MemoryPoolItemPayload<MemoryType>*)memory)->base;
|
| -
|
| - const int32_t usedItems = --_outstandingMemory;
|
| - const int32_t totalItems = _createdMemory.Value();
|
| - const int32_t freeItems = totalItems - usedItems;
|
| - if(freeItems < 0)
|
| - {
|
| - assert(false);
|
| - delete item->payload;
|
| - AlignedFree(item);
|
| - return -1;
|
| - }
|
| - if(freeItems >= totalItems>>1)
|
| - {
|
| - delete item->payload;
|
| - AlignedFree(item);
|
| - --_createdMemory;
|
| - return 0;
|
| - }
|
| - InterlockedPushEntrySList(_pListHead,&(item->itemEntry));
|
| - return 0;
|
| -}
|
| -
|
| -template<class MemoryType>
|
| -bool MemoryPoolImpl<MemoryType>::Initialize()
|
| -{
|
| - _pListHead = (PSLIST_HEADER)AlignedMalloc(sizeof(SLIST_HEADER),
|
| - MEMORY_ALLOCATION_ALIGNMENT);
|
| - if(_pListHead == NULL)
|
| - {
|
| - return false;
|
| - }
|
| - InitializeSListHead(_pListHead);
|
| - return true;
|
| -}
|
| -
|
| -template<class MemoryType>
|
| -int32_t MemoryPoolImpl<MemoryType>::Terminate()
|
| -{
|
| - int32_t itemsFreed = 0;
|
| - PSLIST_ENTRY pListEntry = InterlockedPopEntrySList(_pListHead);
|
| - while(pListEntry != NULL)
|
| - {
|
| - MemoryPoolItem<MemoryType>* item = ((MemoryPoolItem<MemoryType>*)pListEntry);
|
| - delete item->payload;
|
| - AlignedFree(item);
|
| - --_createdMemory;
|
| - itemsFreed++;
|
| - pListEntry = InterlockedPopEntrySList(_pListHead);
|
| - }
|
| - return itemsFreed;
|
| -}
|
| -
|
| -template<class MemoryType>
|
| -MemoryPoolItem<MemoryType>* MemoryPoolImpl<MemoryType>::CreateMemory()
|
| -{
|
| - MemoryPoolItem<MemoryType>* returnValue = (MemoryPoolItem<MemoryType>*)
|
| - AlignedMalloc(sizeof(MemoryPoolItem<MemoryType>),
|
| - MEMORY_ALLOCATION_ALIGNMENT);
|
| - if(returnValue == NULL)
|
| - {
|
| - return NULL;
|
| - }
|
| -
|
| - returnValue->payload = new MemoryPoolItemPayload<MemoryType>();
|
| - if(returnValue->payload == NULL)
|
| - {
|
| - delete returnValue;
|
| - return NULL;
|
| - }
|
| - returnValue->payload->base = returnValue;
|
| - ++_createdMemory;
|
| - return returnValue;
|
| -}
|
| -} // namespace webrtc
|
| -
|
| -#endif // MODULES_AUDIO_CONFERENCE_MIXER_SOURCE_MEMORY_POOL_WINDOWS_H_
|
|
|