Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 4
0
        /// <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);
        }