test_HeapSnapshot_takeCensus_10.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /* Any copyright is dedicated to the Public Domain.
  2. http://creativecommons.org/publicdomain/zero/1.0/ */
  3. // Check byte counts produced by takeCensus.
  4. //
  5. // Ported from js/src/jit-test/tests/debug/Memory-take Census-10.js
  6. function run_test() {
  7. let g = newGlobal();
  8. let dbg = new Debugger(g);
  9. let sizeOfAM = byteSize(allocationMarker());
  10. // Allocate a single allocation marker, and check that we can find it.
  11. g.eval("var hold = allocationMarker();");
  12. let census = saveHeapSnapshotAndTakeCensus(dbg, { breakdown: { by: "objectClass" } });
  13. equal(census.AllocationMarker.count, 1);
  14. equal(census.AllocationMarker.bytes, sizeOfAM);
  15. g.hold = null;
  16. g.eval(` // 1
  17. var objs = []; // 2
  18. function fnerd() { // 3
  19. objs.push(allocationMarker()); // 4
  20. for (let i = 0; i < 10; i++) // 5
  21. objs.push(allocationMarker()); // 6
  22. } // 7
  23. `); // 8
  24. dbg.memory.allocationSamplingProbability = 1;
  25. dbg.memory.trackingAllocationSites = true;
  26. g.fnerd();
  27. dbg.memory.trackingAllocationSites = false;
  28. census = saveHeapSnapshotAndTakeCensus(dbg, {
  29. breakdown: { by: "objectClass",
  30. then: { by: "allocationStack" }
  31. }
  32. });
  33. let seen = 0;
  34. census.AllocationMarker.forEach((v, k) => {
  35. equal(k.functionDisplayName, "fnerd");
  36. switch (k.line) {
  37. case 4:
  38. equal(v.count, 1);
  39. equal(v.bytes, sizeOfAM);
  40. seen++;
  41. break;
  42. case 6:
  43. equal(v.count, 10);
  44. equal(v.bytes, 10 * sizeOfAM);
  45. seen++;
  46. break;
  47. default:
  48. dumpn("Unexpected stack:");
  49. k.toString().split(/\n/g).forEach(s => dumpn(s));
  50. ok(false);
  51. break;
  52. }
  53. });
  54. equal(seen, 2);
  55. do_test_finished();
  56. }