PurgeableVMObject.cpp 910 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include <Kernel/VM/PurgeableVMObject.h>
  2. #include <Kernel/VM/PhysicalPage.h>
  3. NonnullRefPtr<PurgeableVMObject> PurgeableVMObject::create_with_size(size_t size)
  4. {
  5. return adopt(*new PurgeableVMObject(size));
  6. }
  7. PurgeableVMObject::PurgeableVMObject(size_t size)
  8. : AnonymousVMObject(size)
  9. {
  10. }
  11. PurgeableVMObject::PurgeableVMObject(const PurgeableVMObject& other)
  12. : AnonymousVMObject(other)
  13. {
  14. }
  15. PurgeableVMObject::~PurgeableVMObject()
  16. {
  17. }
  18. NonnullRefPtr<VMObject> PurgeableVMObject::clone()
  19. {
  20. return adopt(*new PurgeableVMObject(*this));
  21. }
  22. int PurgeableVMObject::purge()
  23. {
  24. LOCKER(m_paging_lock);
  25. if (!m_volatile)
  26. return 0;
  27. int purged_page_count = 0;
  28. for (size_t i = 0; i < m_physical_pages.size(); ++i) {
  29. if (m_physical_pages[i])
  30. ++purged_page_count;
  31. m_physical_pages[i] = nullptr;
  32. }
  33. m_was_purged = true;
  34. return purged_page_count;
  35. }