[pypy-commit] stmgc c8-private-pages: port and enhance another test
Raemi
noreply at buildbot.pypy.org
Thu Jan 15 18:42:58 CET 2015
Author: Remi Meier <remi.meier at inf.ethz.ch>
Branch: c8-private-pages
Changeset: r1529:14cfe5b96c95
Date: 2015-01-15 10:33 +0100
http://bitbucket.org/pypy/stmgc/changeset/14cfe5b96c95/
Log: port and enhance another test
diff --git a/c8/stm/gcpage.h b/c8/stm/gcpage.h
--- a/c8/stm/gcpage.h
+++ b/c8/stm/gcpage.h
@@ -1,6 +1,6 @@
-/* Granularity when grabbing more unused pages: take 50 at a time */
-#define GCPAGE_NUM_PAGES 50
+/* Granularity when grabbing more unused pages: take 20 at a time */
+#define GCPAGE_NUM_PAGES 20
static char *uninitialized_page_start; /* within segment 0 */
static char *uninitialized_page_stop;
diff --git a/c8/test/test_gcpage.py b/c8/test/test_gcpage.py
--- a/c8/test/test_gcpage.py
+++ b/c8/test/test_gcpage.py
@@ -67,35 +67,56 @@
stm_minor_collect()
new = self.pop_root()
- assert stm_get_private_page(stm_get_obj_pages(new)[0]) == 0
+ pages = stm_get_obj_pages(new)
+ assert stm_is_accessible_page(pages[0]) == True
assert stm_get_flags(new) & GCFLAG_WRITE_BARRIER
- stm_write(new)
+ stm_set_char(new, 'x')
assert not (stm_get_flags(new) & GCFLAG_WRITE_BARRIER)
self.commit_transaction()
- assert stm_get_private_page(stm_get_obj_pages(new)[0]) == 0
+
+ #######
+
+ assert stm_is_accessible_page(pages[0]) == True
assert stm_get_flags(new) & GCFLAG_WRITE_BARRIER
self.start_transaction()
+ assert stm_get_char(new) == 'x'
newer = stm_allocate(16)
self.push_root(newer)
stm_minor_collect()
newer = self.pop_root()
- # 'new' is still in shared_page and committed
- assert stm_get_private_page(stm_get_obj_pages(new)[0]) == 0
+ pageser = stm_get_obj_pages(newer)
+
assert stm_get_flags(new) & GCFLAG_WRITE_BARRIER
- # 'newer' is now part of the SHARED page with 'new', but
- # uncommitted, so no privatization has to take place:
- assert stm_get_obj_pages(new) == stm_get_obj_pages(newer)
+ # same page as committed obj
+ assert pages == pageser
assert stm_get_flags(newer) & GCFLAG_WRITE_BARRIER
- stm_write(newer) # does not privatize
+
+ stm_set_char(newer, 'y')
assert not (stm_get_flags(newer) & GCFLAG_WRITE_BARRIER)
- assert stm_get_private_page(stm_get_obj_pages(newer)[0]) == 0
self.commit_transaction()
- assert stm_get_private_page(stm_get_obj_pages(newer)[0]) == 0
- assert stm_get_flags(newer) & GCFLAG_WRITE_BARRIER
+ #####################
+
+ self.switch(1)
+
+ self.start_transaction()
+ assert stm_is_accessible_page(pages[0]) == False
+ assert stm_get_char(new) == 'x'
+ assert stm_get_char(newer) == 'y'
+ assert stm_is_accessible_page(pages[0]) == True
+
+ another = stm_allocate(16)
+ self.push_root(another)
+ stm_minor_collect()
+ another = self.pop_root()
+ # segment has its own small-obj-pages:
+ assert stm_get_obj_pages(another) != pages
+
+ self.commit_transaction()
+
def test_major_collection(self):
self.start_transaction()
More information about the pypy-commit
mailing list