1 /*
2 * Copyright (c) 2017, Red Hat, Inc. and/or its affiliates.
3 *
4 * This code is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 2 only, as
6 * published by the Free Software Foundation.
7 *
8 * This code is distributed in the hope that it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
11 * version 2 for more details (a copy is included in the LICENSE file that
12 * accompanied this code).
13 *
14 * You should have received a copy of the GNU General Public License version
15 * 2 along with this work; if not, write to the Free Software Foundation,
16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
17 *
18 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
19 * or visit www.oracle.com if you need additional information or have any
20 * questions.
21 *
22 */
23
24 #ifndef SHARE_VM_GC_SHENANDOAH_SHENANDOAH_WORKGROUP_HPP
25 #define SHARE_VM_GC_SHENANDOAH_SHENANDOAH_WORKGROUP_HPP
26
27 #include "utilities/workgroup.hpp"
28 #include "memory/allocation.hpp"
29
30 class ShenandoahWorkGang;
31
32 class ShenandoahWorkerScope : public StackObj {
33 private:
34 uint _n_workers;
35 ShenandoahWorkGang* _workers;
36 public:
37 ShenandoahWorkerScope(ShenandoahWorkGang* workers, uint nworkers, const char* msg);
38 ~ShenandoahWorkerScope();
39 };
40
41
42 class ShenandoahPushWorkerScope : StackObj {
43 private:
44 uint _n_workers;
45 uint _old_workers;
46 ShenandoahWorkGang* _workers;
47
48 public:
49 ShenandoahPushWorkerScope(ShenandoahWorkGang* workers, uint nworkers, bool do_check = true);
50 ~ShenandoahPushWorkerScope();
51 };
52
53
54 class ShenandoahWorkGang : public FlexibleWorkGang {
55 public:
56 ShenandoahWorkGang(const char* name, uint workers,
57 bool are_GC_task_threads,
58 bool are_ConcurrentGC_threads) :
59 FlexibleWorkGang(name, workers, are_GC_task_threads, are_ConcurrentGC_threads) {
60 }
61
62 // Hide FlexibleWorkGang's implementation, avoid _active_workers == _total_workers
63 // check
64 void set_active_workers(uint v) {
65 assert(v <= _total_workers,
66 "Trying to set more workers active than there are");
67 _active_workers = MIN2(v, _total_workers);
68 assert(v != 0, "Trying to set active workers to 0");
69 _active_workers = MAX2(1U, _active_workers);
70 }
71 };
72
|
1 /*
2 * Copyright (c) 2017, 2018, Red Hat, Inc. All rights reserved.
3 *
4 * This code is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 2 only, as
6 * published by the Free Software Foundation.
7 *
8 * This code is distributed in the hope that it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
11 * version 2 for more details (a copy is included in the LICENSE file that
12 * accompanied this code).
13 *
14 * You should have received a copy of the GNU General Public License version
15 * 2 along with this work; if not, write to the Free Software Foundation,
16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
17 *
18 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
19 * or visit www.oracle.com if you need additional information or have any
20 * questions.
21 *
22 */
23
24 #ifndef SHARE_VM_GC_SHENANDOAH_SHENANDOAH_WORKGROUP_HPP
25 #define SHARE_VM_GC_SHENANDOAH_SHENANDOAH_WORKGROUP_HPP
26
27 #include "gc_implementation/shenandoah/shenandoahTaskqueue.hpp"
28 #include "utilities/workgroup.hpp"
29 #include "memory/allocation.hpp"
30
31 class ShenandoahWorkGang;
32
33 class ShenandoahWorkerScope : public StackObj {
34 private:
35 uint _n_workers;
36 ShenandoahWorkGang* _workers;
37 public:
38 ShenandoahWorkerScope(ShenandoahWorkGang* workers, uint nworkers, const char* msg, bool do_check = true);
39 ~ShenandoahWorkerScope();
40 };
41
42 class ShenandoahPushWorkerScope : StackObj {
43 private:
44 uint _n_workers;
45 uint _old_workers;
46 ShenandoahWorkGang* _workers;
47
48 public:
49 ShenandoahPushWorkerScope(ShenandoahWorkGang* workers, uint nworkers, bool do_check = true);
50 ~ShenandoahPushWorkerScope();
51 };
52
53 class ShenandoahWorkGang : public FlexibleWorkGang {
54 public:
55 ShenandoahWorkGang(const char* name, uint workers,
56 bool are_GC_task_threads,
57 bool are_ConcurrentGC_threads) :
58 FlexibleWorkGang(name, workers, are_GC_task_threads, are_ConcurrentGC_threads) {
59 }
60
61 // Hide FlexibleWorkGang's implementation, avoid _active_workers == _total_workers
62 // check
63 void set_active_workers(uint v) {
64 assert(v <= _total_workers,
65 "Trying to set more workers active than there are");
66 _active_workers = MIN2(v, _total_workers);
67 assert(v != 0, "Trying to set active workers to 0");
68 _active_workers = MAX2(1U, _active_workers);
69 }
70 };
71
|