public void TestClone() { CloseableReference <IDisposable> copy = _closeableReference.Clone(); Assert.AreEqual(2, _closeableReference.GetUnderlyingReferenceTestOnly().GetRefCountTestOnly()); Assert.AreSame(_closeableReference.GetUnderlyingReferenceTestOnly(), copy.GetUnderlyingReferenceTestOnly()); }
/// <summary> /// Instantiates the <see cref="NativePooledByteBuffer"/>. /// </summary> public NativePooledByteBuffer(CloseableReference <NativeMemoryChunk> bufRef, int size) { Preconditions.CheckNotNull(bufRef); Preconditions.CheckArgument(size >= 0 && size <= bufRef.Get().Size); _bufRef = bufRef.Clone(); _size = size; }
public void TestCachingSameKeyTwice() { CloseableReference <int> originalRef1 = NewReference(110); CloseableReference <int> cachedRef1 = _cache.Cache(KEY, originalRef1); CloseableReference <int> cachedRef2a = _cache.Get(KEY); CloseableReference <int> cachedRef2b = cachedRef2a.Clone(); CloseableReference <int> cachedRef3 = _cache.Get(KEY); CountingMemoryCache <string, int> .Entry entry1 = _cache._cachedEntries.Get(KEY); CloseableReference <int> cachedRef2 = _cache.Cache(KEY, NewReference(120)); CountingMemoryCache <string, int> .Entry entry2 = _cache._cachedEntries.Get(KEY); Assert.AreNotSame(entry1, entry2); AssertOrphanWithCount(entry1, 3); AssertSharedWithCount(KEY, 120, 1); // Release the orphaned reference only when all clients are gone originalRef1.Dispose(); cachedRef2b.Dispose(); AssertOrphanWithCount(entry1, 3); cachedRef2a.Dispose(); AssertOrphanWithCount(entry1, 2); cachedRef1.Dispose(); AssertOrphanWithCount(entry1, 1); Assert.AreEqual(0, _releaseCallCount); cachedRef3.Dispose(); AssertOrphanWithCount(entry1, 0); Assert.AreEqual(1, _releaseCallCount); }
/// <summary> /// Instantiates the <see cref="EncodedImage"/> with provided params /// </summary> public EncodedImage(CloseableReference <IPooledByteBuffer> pooledByteBufferRef) { Preconditions.CheckArgument( CloseableReference <IPooledByteBuffer> .IsValid(pooledByteBufferRef)); _pooledByteBufferRef = pooledByteBufferRef.Clone(); _inputStreamSupplier = null; }
public void TestInUseCount() { CloseableReference <int> cachedRef1 = _cache.Cache(KEY, NewReference(100)); CloseableReference <int> cachedRef2a = _cache.Get(KEY); CloseableReference <int> cachedRef2b = cachedRef2a.Clone(); AssertTotalSize(1, 100); AssertExclusivelyOwnedSize(0, 0); AssertSharedWithCount(KEY, 100, 2); CloseableReference <int> cachedRef3a = _cache.Get(KEY); CloseableReference <int> cachedRef3b = cachedRef3a.Clone(); CloseableReference <int> cachedRef3c = cachedRef3b.Clone(); AssertTotalSize(1, 100); AssertExclusivelyOwnedSize(0, 0); AssertSharedWithCount(KEY, 100, 3); cachedRef1.Dispose(); AssertTotalSize(1, 100); AssertExclusivelyOwnedSize(0, 0); AssertSharedWithCount(KEY, 100, 2); // All copies of cachedRef2a need to be closed for usage count to drop cachedRef2a.Dispose(); AssertTotalSize(1, 100); AssertExclusivelyOwnedSize(0, 0); AssertSharedWithCount(KEY, 100, 2); cachedRef2b.Dispose(); AssertTotalSize(1, 100); AssertExclusivelyOwnedSize(0, 0); AssertSharedWithCount(KEY, 100, 1); // All copies of cachedRef3a need to be closed for usage count to drop cachedRef3c.Dispose(); AssertTotalSize(1, 100); AssertExclusivelyOwnedSize(0, 0); AssertSharedWithCount(KEY, 100, 1); cachedRef3b.Dispose(); AssertTotalSize(1, 100); AssertExclusivelyOwnedSize(0, 0); AssertSharedWithCount(KEY, 100, 1); cachedRef3a.Dispose(); AssertTotalSize(1, 100); AssertExclusivelyOwnedSize(1, 100); AssertExclusivelyOwned(KEY, 100); }