18b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com/* 28b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * Copyright 2013 Google Inc. 38b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * 48b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * Use of this source code is governed by a BSD-style license that can be 58b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * found in the LICENSE file. 68b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com */ 78b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com 88b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com#ifndef SkDiscardableMemory_DEFINED 98b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com#define SkDiscardableMemory_DEFINED 108b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com 112c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com#include "SkRefCnt.h" 128b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com#include "SkTypes.h" 138b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com 148b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com/** 158b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * Interface for discardable memory. Implementation is provided by the 168b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * embedder. 178b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com */ 18a6aa0e31f9e5e19fe6a2b2799fbdeea3ed373089commit-bot@chromium.orgclass SK_API SkDiscardableMemory { 198b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.compublic: 208b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com /** 218b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * Factory method that creates, initializes and locks an SkDiscardableMemory 228b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * object. If either of these steps fails, a NULL pointer will be returned. 238b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com */ 248b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com static SkDiscardableMemory* Create(size_t bytes); 258b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com 262c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com /** 272c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com * Factory class that creates, initializes and locks an SkDiscardableMemory 282c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com * object. If either of these steps fails, a NULL pointer will be returned. 292c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com */ 302c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com class Factory : public SkRefCnt { 312c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com public: 322c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com virtual SkDiscardableMemory* create(size_t bytes) = 0; 332c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com private: 342c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com typedef SkRefCnt INHERITED; 352c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com }; 362c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com 378b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com /** Must not be called while locked. 388b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com */ 398b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com virtual ~SkDiscardableMemory() {} 408b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com 418b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com /** 428b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * Locks the memory, prevent it from being discarded. Once locked. you may 438b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * obtain a pointer to that memory using the data() method. 448b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * 458b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * lock() may return false, indicating that the underlying memory was 468b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * discarded and that the lock failed. 478b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * 488b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * Nested calls to lock are not allowed. 498b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com */ 508b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com virtual bool lock() = 0; 518b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com 528b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com /** 538b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * Returns the current pointer for the discardable memory. This call is ONLY 548b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * valid when the discardable memory object is locked. 558b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com */ 568b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com virtual void* data() = 0; 578b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com 588b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com /** 598b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * Unlock the memory so that it can be purged by the system. Must be called 608b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com * after every successful lock call. 618b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com */ 628b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com virtual void unlock() = 0; 638b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com}; 648b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com 658b71ef16ece9ec7f1250f2dc093d9a2282f4c2ccscroggo@google.com#endif 66