equal
deleted
inserted
replaced
1 /* |
1 /* |
2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
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 |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
626 CloseHandle(osthread->thread_handle()); |
626 CloseHandle(osthread->thread_handle()); |
627 CloseHandle(osthread->interrupt_event()); |
627 CloseHandle(osthread->interrupt_event()); |
628 delete osthread; |
628 delete osthread; |
629 } |
629 } |
630 |
630 |
631 |
|
632 static int has_performance_count = 0; |
|
633 static jlong first_filetime; |
631 static jlong first_filetime; |
634 static jlong initial_performance_count; |
632 static jlong initial_performance_count; |
635 static jlong performance_frequency; |
633 static jlong performance_frequency; |
636 |
634 |
637 |
635 |
643 } |
641 } |
644 |
642 |
645 |
643 |
646 jlong os::elapsed_counter() { |
644 jlong os::elapsed_counter() { |
647 LARGE_INTEGER count; |
645 LARGE_INTEGER count; |
648 if (has_performance_count) { |
646 if (win32::_has_performance_count) { |
649 QueryPerformanceCounter(&count); |
647 QueryPerformanceCounter(&count); |
650 return as_long(count) - initial_performance_count; |
648 return as_long(count) - initial_performance_count; |
651 } else { |
649 } else { |
652 FILETIME wt; |
650 FILETIME wt; |
653 GetSystemTimeAsFileTime(&wt); |
651 GetSystemTimeAsFileTime(&wt); |
655 } |
653 } |
656 } |
654 } |
657 |
655 |
658 |
656 |
659 jlong os::elapsed_frequency() { |
657 jlong os::elapsed_frequency() { |
660 if (has_performance_count) { |
658 if (win32::_has_performance_count) { |
661 return performance_frequency; |
659 return performance_frequency; |
662 } else { |
660 } else { |
663 // the FILETIME time is the number of 100-nanosecond intervals since January 1,1601. |
661 // the FILETIME time is the number of 100-nanosecond intervals since January 1,1601. |
664 return 10000000; |
662 return 10000000; |
665 } |
663 } |
734 bool os::bind_to_processor(uint processor_id) { |
732 bool os::bind_to_processor(uint processor_id) { |
735 // Not yet implemented. |
733 // Not yet implemented. |
736 return false; |
734 return false; |
737 } |
735 } |
738 |
736 |
739 static void initialize_performance_counter() { |
737 void os::win32::initialize_performance_counter() { |
740 LARGE_INTEGER count; |
738 LARGE_INTEGER count; |
741 if (QueryPerformanceFrequency(&count)) { |
739 if (QueryPerformanceFrequency(&count)) { |
742 has_performance_count = 1; |
740 win32::_has_performance_count = 1; |
743 performance_frequency = as_long(count); |
741 performance_frequency = as_long(count); |
744 QueryPerformanceCounter(&count); |
742 QueryPerformanceCounter(&count); |
745 initial_performance_count = as_long(count); |
743 initial_performance_count = as_long(count); |
746 } else { |
744 } else { |
747 has_performance_count = 0; |
745 win32::_has_performance_count = 0; |
748 FILETIME wt; |
746 FILETIME wt; |
749 GetSystemTimeAsFileTime(&wt); |
747 GetSystemTimeAsFileTime(&wt); |
750 first_filetime = jlong_from(wt.dwHighDateTime, wt.dwLowDateTime); |
748 first_filetime = jlong_from(wt.dwHighDateTime, wt.dwLowDateTime); |
751 } |
749 } |
752 } |
750 } |
837 return windows_to_java_time(wt); |
835 return windows_to_java_time(wt); |
838 } |
836 } |
839 } |
837 } |
840 |
838 |
841 jlong os::javaTimeNanos() { |
839 jlong os::javaTimeNanos() { |
842 if (!has_performance_count) { |
840 if (!win32::_has_performance_count) { |
843 return javaTimeMillis() * NANOSECS_PER_MILLISEC; // the best we can do. |
841 return javaTimeMillis() * NANOSECS_PER_MILLISEC; // the best we can do. |
844 } else { |
842 } else { |
845 LARGE_INTEGER current_count; |
843 LARGE_INTEGER current_count; |
846 QueryPerformanceCounter(¤t_count); |
844 QueryPerformanceCounter(¤t_count); |
847 double current = as_long(current_count); |
845 double current = as_long(current_count); |
850 return time; |
848 return time; |
851 } |
849 } |
852 } |
850 } |
853 |
851 |
854 void os::javaTimeNanos_info(jvmtiTimerInfo *info_ptr) { |
852 void os::javaTimeNanos_info(jvmtiTimerInfo *info_ptr) { |
855 if (!has_performance_count) { |
853 if (!win32::_has_performance_count) { |
856 // javaTimeMillis() doesn't have much percision, |
854 // javaTimeMillis() doesn't have much percision, |
857 // but it is not going to wrap -- so all 64 bits |
855 // but it is not going to wrap -- so all 64 bits |
858 info_ptr->max_value = ALL_64_BITS; |
856 info_ptr->max_value = ALL_64_BITS; |
859 |
857 |
860 // this is a wall clock timer, so may skip |
858 // this is a wall clock timer, so may skip |
3680 |
3678 |
3681 bool os::win32::_is_nt = false; |
3679 bool os::win32::_is_nt = false; |
3682 bool os::win32::_is_windows_2003 = false; |
3680 bool os::win32::_is_windows_2003 = false; |
3683 bool os::win32::_is_windows_server = false; |
3681 bool os::win32::_is_windows_server = false; |
3684 |
3682 |
|
3683 bool os::win32::_has_performance_count = 0; |
|
3684 |
3685 void os::win32::initialize_system_info() { |
3685 void os::win32::initialize_system_info() { |
3686 SYSTEM_INFO si; |
3686 SYSTEM_INFO si; |
3687 GetSystemInfo(&si); |
3687 GetSystemInfo(&si); |
3688 _vm_page_size = si.dwPageSize; |
3688 _vm_page_size = si.dwPageSize; |
3689 _vm_allocation_granularity = si.dwAllocationGranularity; |
3689 _vm_allocation_granularity = si.dwAllocationGranularity; |