1829 |
1829 |
1830 class ThreadTimesClosure: public ThreadClosure { |
1830 class ThreadTimesClosure: public ThreadClosure { |
1831 private: |
1831 private: |
1832 objArrayHandle _names_strings; |
1832 objArrayHandle _names_strings; |
1833 char **_names_chars; |
1833 char **_names_chars; |
1834 typeArrayOop _times; |
1834 typeArrayHandle _times; |
1835 int _names_len; |
1835 int _names_len; |
1836 int _times_len; |
1836 int _times_len; |
1837 int _count; |
1837 int _count; |
1838 |
1838 |
1839 public: |
1839 public: |
1840 ThreadTimesClosure(objArrayHandle names, typeArrayOop times); |
1840 ThreadTimesClosure(objArrayHandle names, typeArrayHandle times); |
1841 ~ThreadTimesClosure(); |
1841 ~ThreadTimesClosure(); |
1842 virtual void do_thread(Thread* thread); |
1842 virtual void do_thread(Thread* thread); |
1843 void do_unlocked(); |
1843 void do_unlocked(); |
1844 int count() { return _count; } |
1844 int count() { return _count; } |
1845 }; |
1845 }; |
1846 |
1846 |
1847 ThreadTimesClosure::ThreadTimesClosure(objArrayHandle names, |
1847 ThreadTimesClosure::ThreadTimesClosure(objArrayHandle names, |
1848 typeArrayOop times) { |
1848 typeArrayHandle times) { |
1849 assert(names() != NULL, "names was NULL"); |
1849 assert(names() != NULL, "names was NULL"); |
1850 assert(times != NULL, "times was NULL"); |
1850 assert(times() != NULL, "times was NULL"); |
1851 _names_strings = names; |
1851 _names_strings = names; |
1852 _names_len = names->length(); |
1852 _names_len = names->length(); |
1853 _names_chars = NEW_C_HEAP_ARRAY(char*, _names_len, mtInternal); |
1853 _names_chars = NEW_C_HEAP_ARRAY(char*, _names_len, mtInternal); |
1854 _times = times; |
1854 _times = times; |
1855 _times_len = times->length(); |
1855 _times_len = times->length(); |
1923 } |
1923 } |
1924 |
1924 |
1925 typeArrayOop ta = typeArrayOop(JNIHandles::resolve_non_null(times)); |
1925 typeArrayOop ta = typeArrayOop(JNIHandles::resolve_non_null(times)); |
1926 typeArrayHandle times_ah(THREAD, ta); |
1926 typeArrayHandle times_ah(THREAD, ta); |
1927 |
1927 |
1928 ThreadTimesClosure ttc(names_ah, times_ah()); |
1928 ThreadTimesClosure ttc(names_ah, times_ah); |
1929 { |
1929 { |
1930 MutexLockerEx ml(Threads_lock); |
1930 MutexLockerEx ml(Threads_lock); |
1931 Threads::threads_do(&ttc); |
1931 Threads::threads_do(&ttc); |
1932 } |
1932 } |
1933 ttc.do_unlocked(); |
1933 ttc.do_unlocked(); |