< prev index next >

src/share/vm/gc/shared/taskqueue.cpp

Print this page




  75     }
  76   }
  77 }
  78 
  79 void TaskQueueStats::print(outputStream* stream, unsigned int width) const
  80 {
  81   #define FMT SIZE_FORMAT_W(*)
  82   stream->print(FMT, width, _stats[0]);
  83   for (unsigned int i = 1; i < last_stat_id; ++i) {
  84     stream->print(" " FMT, width, _stats[i]);
  85   }
  86   #undef FMT
  87 }
  88 
  89 #ifdef ASSERT
  90 // Invariants which should hold after a TaskQueue has been emptied and is
  91 // quiescent; they do not hold at arbitrary times.
  92 void TaskQueueStats::verify() const
  93 {
  94   assert(get(push) == get(pop) + get(steal),
  95          err_msg("push=" SIZE_FORMAT " pop=" SIZE_FORMAT " steal=" SIZE_FORMAT,
  96                  get(push), get(pop), get(steal)));
  97   assert(get(pop_slow) <= get(pop),
  98          err_msg("pop_slow=" SIZE_FORMAT " pop=" SIZE_FORMAT,
  99                  get(pop_slow), get(pop)));
 100   assert(get(steal) <= get(steal_attempt),
 101          err_msg("steal=" SIZE_FORMAT " steal_attempt=" SIZE_FORMAT,
 102                  get(steal), get(steal_attempt)));
 103   assert(get(overflow) == 0 || get(push) != 0,
 104          err_msg("overflow=" SIZE_FORMAT " push=" SIZE_FORMAT,
 105                  get(overflow), get(push)));
 106   assert(get(overflow_max_len) == 0 || get(overflow) != 0,
 107          err_msg("overflow_max_len=" SIZE_FORMAT " overflow=" SIZE_FORMAT,
 108                  get(overflow_max_len), get(overflow)));
 109 }
 110 #endif // ASSERT
 111 #endif // TASKQUEUE_STATS
 112 
 113 int TaskQueueSetSuper::randomParkAndMiller(int *seed0) {
 114   const int a =      16807;
 115   const int m = 2147483647;
 116   const int q =     127773;  /* m div a */
 117   const int r =       2836;  /* m mod a */
 118   assert(sizeof(int) == 4, "I think this relies on that");
 119   int seed = *seed0;
 120   int hi   = seed / q;
 121   int lo   = seed % q;
 122   int test = a * lo - r * hi;
 123   if (test > 0)
 124     seed = test;
 125   else
 126     seed = test + m;
 127   *seed0 = seed;
 128   return seed;




  75     }
  76   }
  77 }
  78 
  79 void TaskQueueStats::print(outputStream* stream, unsigned int width) const
  80 {
  81   #define FMT SIZE_FORMAT_W(*)
  82   stream->print(FMT, width, _stats[0]);
  83   for (unsigned int i = 1; i < last_stat_id; ++i) {
  84     stream->print(" " FMT, width, _stats[i]);
  85   }
  86   #undef FMT
  87 }
  88 
  89 #ifdef ASSERT
  90 // Invariants which should hold after a TaskQueue has been emptied and is
  91 // quiescent; they do not hold at arbitrary times.
  92 void TaskQueueStats::verify() const
  93 {
  94   assert(get(push) == get(pop) + get(steal),
  95          "push=" SIZE_FORMAT " pop=" SIZE_FORMAT " steal=" SIZE_FORMAT,
  96          get(push), get(pop), get(steal));
  97   assert(get(pop_slow) <= get(pop),
  98          "pop_slow=" SIZE_FORMAT " pop=" SIZE_FORMAT,
  99          get(pop_slow), get(pop));
 100   assert(get(steal) <= get(steal_attempt),
 101          "steal=" SIZE_FORMAT " steal_attempt=" SIZE_FORMAT,
 102          get(steal), get(steal_attempt));
 103   assert(get(overflow) == 0 || get(push) != 0,
 104          "overflow=" SIZE_FORMAT " push=" SIZE_FORMAT,
 105          get(overflow), get(push));
 106   assert(get(overflow_max_len) == 0 || get(overflow) != 0,
 107          "overflow_max_len=" SIZE_FORMAT " overflow=" SIZE_FORMAT,
 108          get(overflow_max_len), get(overflow));
 109 }
 110 #endif // ASSERT
 111 #endif // TASKQUEUE_STATS
 112 
 113 int TaskQueueSetSuper::randomParkAndMiller(int *seed0) {
 114   const int a =      16807;
 115   const int m = 2147483647;
 116   const int q =     127773;  /* m div a */
 117   const int r =       2836;  /* m mod a */
 118   assert(sizeof(int) == 4, "I think this relies on that");
 119   int seed = *seed0;
 120   int hi   = seed / q;
 121   int lo   = seed % q;
 122   int test = a * lo - r * hi;
 123   if (test > 0)
 124     seed = test;
 125   else
 126     seed = test + m;
 127   *seed0 = seed;
 128   return seed;


< prev index next >