1 /* 2 * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 // Forward declarations of classes defined here. 26 class GCTaskThread; 27 class GCTaskTimeStamp; 28 29 // Declarations of classes referenced in this file via pointer. 30 class GCTaskManager; 31 32 class GCTaskThread : public WorkerThread { 33 private: 34 // Instance state. 35 GCTaskManager* _manager; // Manager for worker. 36 const uint _processor_id; // Which processor the worker is on. 37 38 GCTaskTimeStamp* _time_stamps; 39 uint _time_stamp_index; 40 41 GCTaskTimeStamp* time_stamp_at(uint index); 42 43 public: 44 // Factory create and destroy methods. 45 static GCTaskThread* create(GCTaskManager* manager, 46 uint which, 47 uint processor_id) { 48 return new GCTaskThread(manager, which, processor_id); 49 } 50 static void destroy(GCTaskThread* manager) { 51 if (manager != NULL) { 52 delete manager; 53 } 54 } 55 // Methods from Thread. 56 bool is_GC_task_thread() const { 57 return true; 58 } 59 virtual void run(); 60 // Methods. 61 void start(); 62 63 void print_task_time_stamps(); 64 void print_on(outputStream* st) const; 65 void print() const { print_on(tty); } 66 67 protected: 68 // Constructor. Clients use factory, but there could be subclasses. 69 GCTaskThread(GCTaskManager* manager, uint which, uint processor_id); 70 // Destructor: virtual destructor because of virtual methods. 71 virtual ~GCTaskThread(); 72 // Accessors. 73 GCTaskManager* manager() const { 74 return _manager; 75 } 76 uint which() const { 77 return id(); 78 } 79 uint processor_id() const { 80 return _processor_id; 81 } 82 }; 83 84 class GCTaskTimeStamp : public CHeapObj 85 { 86 private: 87 jlong _entry_time; 88 jlong _exit_time; 89 char* _name; 90 91 public: 92 jlong entry_time() { return _entry_time; } 93 jlong exit_time() { return _exit_time; } 94 const char* name() const { return (const char*)_name; } 95 96 void set_entry_time(jlong time) { _entry_time = time; } 97 void set_exit_time(jlong time) { _exit_time = time; } 98 void set_name(char* name) { _name = name; } 99 };