Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/coreclr/dlls/mscoree/coreclr/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -179,12 +179,14 @@ if(TARGET coreclr)
$<TARGET_NAME_IF_EXISTS:coreclrpal>
${CLRJIT_STATIC}
${CLRINTERPRETER_STATIC}
vm_gc_wks
$<TARGET_NAME_IF_EXISTS:vm_gc_svr>
cee_wks_core
cee_wks
${FOUNDATION})
endif()

target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} vm_gc_wks $<TARGET_NAME_IF_EXISTS:vm_gc_svr> cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_compile_definitions(coreclr_static PUBLIC CORECLR_EMBEDDED)

if(FEATURE_INPROC_CRASHREPORT AND NOT CLR_CROSS_COMPONENTS_BUILD)
Expand Down
59 changes: 53 additions & 6 deletions src/coreclr/gc/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,16 +11,12 @@ set(GC_SOURCES
gcconfig.cpp
gccommon.cpp
gcscan.cpp
gcsvr.cpp
gcwks.cpp
handletable.cpp
handletablecore.cpp
handletablescan.cpp
objecthandle.cpp
softwarewritewatch.cpp
gchandletable.cpp
gceesvr.cpp
gceewks.cpp
gcload.cpp
gcbridge.cpp
handletablecache.cpp)
Expand DownExpand Up@@ -57,6 +53,7 @@ if (CLR_CMAKE_TARGET_WIN32)
env/gcenv.windows.inl
env/volatile.h
gc.h
gcinternal.h
gcconfig.h
gcbridge.h
gcdesc.h
Expand DownExpand Up@@ -105,14 +102,52 @@ list(APPEND GC_SOURCES ${GC_HEADERS})

convert_to_absolute_path(GC_SOURCES ${GC_SOURCES})

set(GC_WKS_SVR_SOURCES
gcee.cpp
gc.cpp
init.cpp
no_gc.cpp
finalization.cpp
dynamic_tuning.cpp
region_free_list.cpp
region_allocator.cpp
memory.cpp
sweep.cpp
collect.cpp
diagnostics.cpp
dynamic_heap_count.cpp
card_table.cpp
relocate_compact.cpp
mark_phase.cpp
background.cpp
interface.cpp
allocation.cpp
plan_phase.cpp
regions_segments.cpp)

if(FEATURE_STANDALONE_GC)
if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64)
set(BUILD_EXP_GC 1)
endif()

# clrgcexp is build with standalone+regions
if (BUILD_EXP_GC)
add_library_clr(clrgcexp SHARED ${GC_SOURCES})
add_library_clr(clrgcexp_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_wks PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_wks eventing_headers)
target_compile_definitions(clrgcexp_gc_wks PRIVATE USE_REGIONS)
set(CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_wks>)
if (FEATURE_SVR_GC)
add_library_clr(clrgcexp_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_svr PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_svr eventing_headers)
target_compile_definitions(clrgcexp_gc_svr PRIVATE SERVER_GC USE_REGIONS)
list(APPEND CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_svr>)
endif()

add_library_clr(clrgcexp SHARED ${GC_SOURCES} ${CLRGGCEXP_OBJECTS})
add_dependencies(clrgcexp eventing_headers)
target_link_libraries(clrgcexp PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgcexp PRIVATE gcexp_dll_wks_descriptor)
Expand All@@ -123,8 +158,20 @@ if(FEATURE_STANDALONE_GC)
install_clr(TARGETS clrgcexp DESTINATIONS . COMPONENT runtime)
endif (BUILD_EXP_GC)

add_library_clr(clrgc_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_wks eventing_headers)
set(CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_wks>)
if(FEATURE_SVR_GC)
add_library_clr(clrgc_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_svr eventing_headers)
target_compile_definitions(clrgc_gc_svr PRIVATE SERVER_GC)
list(APPEND CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_svr>)
endif()

# clrgc is build with standalone+segments
add_library_clr(clrgc SHARED ${GC_SOURCES})
add_library_clr(clrgc SHARED ${GC_SOURCES} ${CLRGC_OBJECTS})
add_dependencies(clrgc eventing_headers)
target_link_libraries(clrgc PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgc PRIVATE gc_dll_wks_descriptor)
Expand Down
99 changes: 11 additions & 88 deletions src/coreclr/gc/allocation.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

allocator::allocator (unsigned int num_b, int fbb, alloc_list* b, int gen)
{
Expand DownExpand Up@@ -1321,27 +1330,6 @@ bool gc_heap::new_allocation_allowed (int gen_number)
return TRUE;
}

inline
ptrdiff_t gc_heap::get_desired_allocation (int gen_number)
{
return dd_desired_allocation (dynamic_data_of (gen_number));
}

inline
ptrdiff_t gc_heap::get_new_allocation (int gen_number)
{
return dd_new_allocation (dynamic_data_of (gen_number));
}

//return the amount allocated so far in gen_number
inline
ptrdiff_t gc_heap::get_allocation (int gen_number)
{
dynamic_data* dd = dynamic_data_of (gen_number);

return dd_desired_allocation (dd) - dd_new_allocation (dd);
}

#ifdef SHORT_PLUGS
inline
void set_padding_in_expand (uint8_t* old_loc,
Expand DownExpand Up@@ -3253,29 +3241,6 @@ allocation_state gc_heap::allocate_soh (int gen_number,
return soh_alloc_state;
}

#ifdef BACKGROUND_GC
inline
void gc_heap::bgc_track_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Increment (&uoh_alloc_thread_count);
dprintf (3, ("h%d: inc lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

inline
void gc_heap::bgc_untrack_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Decrement (&uoh_alloc_thread_count);
dprintf (3, ("h%d: dec lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

#endif //BACKGROUND_GC

size_t gc_heap::get_uoh_seg_size (size_t size)
{
size_t default_seg_size =
Expand DownExpand Up@@ -4551,41 +4516,6 @@ BOOL gc_heap::allocate_more_space(alloc_context* acontext, size_t size,
return (status == a_state_can_allocate);
}

inline
CObjectHeader* gc_heap::allocate (size_t jsize, alloc_context* acontext, uint32_t flags)
{
size_t size = Align (jsize);
assert (size >= Align (min_obj_size));
{
retry:
uint8_t* result = acontext->alloc_ptr;
acontext->alloc_ptr+=size;
if (acontext->alloc_ptr <= acontext->alloc_limit)
{
CObjectHeader* obj = (CObjectHeader*)result;
assert (obj != 0);
return obj;
}
else
{
acontext->alloc_ptr -= size;

#ifdef _MSC_VER
#pragma inline_depth(0)
#endif //_MSC_VER

if (! allocate_more_space (acontext, size, flags, 0))
return 0;

#ifdef _MSC_VER
#pragma inline_depth(20)
#endif //_MSC_VER

goto retry;
}
}
}

void gc_heap::leave_allocation_segment (generation* gen)
{
adjust_limit (0, 0, gen);
Expand DownExpand Up@@ -5417,15 +5347,6 @@ generation* gc_heap::ensure_ephemeral_heap_segment (generation* consing_gen)

#endif //!USE_REGIONS

inline
void gc_heap::init_alloc_info (generation* gen, heap_segment* seg)
{
generation_allocation_segment (gen) = seg;
generation_allocation_pointer (gen) = heap_segment_mem (seg);
generation_allocation_limit (gen) = generation_allocation_pointer (gen);
generation_allocation_context_start_region (gen) = generation_allocation_pointer (gen);
}

inline
heap_segment* gc_heap::get_next_alloc_seg (generation* gen)
{
Expand DownExpand Up@@ -5880,3 +5801,5 @@ CObjectHeader* gc_heap::allocate_uoh_object (size_t jsize, uint32_t flags, int g

return obj;
}

} // namespace SVR/WKS
53 changes: 11 additions & 42 deletions src/coreclr/gc/background.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

// static

Expand DownExpand Up@@ -221,47 +230,6 @@ void gc_heap::concurrent_print_time_delta (const char* msg)
}

#ifdef BACKGROUND_GC
inline
BOOL gc_heap::background_marked (uint8_t* o)
{
return mark_array_marked (o);
}

inline
BOOL gc_heap::background_mark1 (uint8_t* o)
{
BOOL to_mark = !mark_array_marked (o);

dprintf (3, ("b*%zx*b(%d)", (size_t)o, (to_mark ? 1 : 0)));
if (to_mark)
{
mark_array_set_marked (o);
dprintf (4, ("n*%zx*n", (size_t)o));
return TRUE;
}
else
return FALSE;
}

// TODO: we could consider filtering out NULL's here instead of going to
// look for it on other heaps
inline
BOOL gc_heap::background_mark (uint8_t* o, uint8_t* low, uint8_t* high)
{
BOOL marked = FALSE;
if ((o >= low) && (o < high))
marked = background_mark1 (o);
#ifdef MULTIPLE_HEAPS
else if (o)
{
gc_heap* hp = heap_of (o);
assert (hp);
if ((o >= hp->background_saved_lowest_address) && (o < hp->background_saved_highest_address))
marked = background_mark1 (o);
}
#endif //MULTIPLE_HEAPS
return marked;
}

#ifdef USE_REGIONS
void gc_heap::set_background_overflow_p (uint8_t* oo)
Expand DownExpand Up@@ -3465,7 +3433,6 @@ void gc_heap::process_background_segment_end (heap_segment* seg,
bgc_verify_mark_array_cleared (seg);
}

inline
BOOL gc_heap::fgc_should_consider_object (uint8_t* o,
heap_segment* seg,
BOOL consider_bgc_mark_p,
Expand DownExpand Up@@ -4611,3 +4578,5 @@ size_t gc_heap::get_mark_array_size (heap_segment* seg)
}

#endif //USE_REGIONS

} // namespace WKS/SVR
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/coreclr/dlls/mscoree/coreclr/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -179,12 +179,14 @@ if(TARGET coreclr)
$<TARGET_NAME_IF_EXISTS:coreclrpal>
${CLRJIT_STATIC}
${CLRINTERPRETER_STATIC}
vm_gc_wks
$<TARGET_NAME_IF_EXISTS:vm_gc_svr>
cee_wks_core
cee_wks
${FOUNDATION})
endif()

target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} vm_gc_wks $<TARGET_NAME_IF_EXISTS:vm_gc_svr> cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_compile_definitions(coreclr_static PUBLIC CORECLR_EMBEDDED)

if(FEATURE_INPROC_CRASHREPORT AND NOT CLR_CROSS_COMPONENTS_BUILD)
Expand Down
59 changes: 53 additions & 6 deletions src/coreclr/gc/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,16 +11,12 @@ set(GC_SOURCES
gcconfig.cpp
gccommon.cpp
gcscan.cpp
gcsvr.cpp
gcwks.cpp
handletable.cpp
handletablecore.cpp
handletablescan.cpp
objecthandle.cpp
softwarewritewatch.cpp
gchandletable.cpp
gceesvr.cpp
gceewks.cpp
gcload.cpp
gcbridge.cpp
handletablecache.cpp)
Expand DownExpand Up@@ -57,6 +53,7 @@ if (CLR_CMAKE_TARGET_WIN32)
env/gcenv.windows.inl
env/volatile.h
gc.h
gcinternal.h
gcconfig.h
gcbridge.h
gcdesc.h
Expand DownExpand Up@@ -105,14 +102,52 @@ list(APPEND GC_SOURCES ${GC_HEADERS})

convert_to_absolute_path(GC_SOURCES ${GC_SOURCES})

set(GC_WKS_SVR_SOURCES
gcee.cpp
gc.cpp
init.cpp
no_gc.cpp
finalization.cpp
dynamic_tuning.cpp
region_free_list.cpp
region_allocator.cpp
memory.cpp
sweep.cpp
collect.cpp
diagnostics.cpp
dynamic_heap_count.cpp
card_table.cpp
relocate_compact.cpp
mark_phase.cpp
background.cpp
interface.cpp
allocation.cpp
plan_phase.cpp
regions_segments.cpp)

if(FEATURE_STANDALONE_GC)
if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64)
set(BUILD_EXP_GC 1)
endif()

# clrgcexp is build with standalone+regions
if (BUILD_EXP_GC)
add_library_clr(clrgcexp SHARED ${GC_SOURCES})
add_library_clr(clrgcexp_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_wks PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_wks eventing_headers)
target_compile_definitions(clrgcexp_gc_wks PRIVATE USE_REGIONS)
set(CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_wks>)
if (FEATURE_SVR_GC)
add_library_clr(clrgcexp_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_svr PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_svr eventing_headers)
target_compile_definitions(clrgcexp_gc_svr PRIVATE SERVER_GC USE_REGIONS)
list(APPEND CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_svr>)
endif()

add_library_clr(clrgcexp SHARED ${GC_SOURCES} ${CLRGGCEXP_OBJECTS})
add_dependencies(clrgcexp eventing_headers)
target_link_libraries(clrgcexp PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgcexp PRIVATE gcexp_dll_wks_descriptor)
Expand All@@ -123,8 +158,20 @@ if(FEATURE_STANDALONE_GC)
install_clr(TARGETS clrgcexp DESTINATIONS . COMPONENT runtime)
endif (BUILD_EXP_GC)

add_library_clr(clrgc_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_wks eventing_headers)
set(CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_wks>)
if(FEATURE_SVR_GC)
add_library_clr(clrgc_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_svr eventing_headers)
target_compile_definitions(clrgc_gc_svr PRIVATE SERVER_GC)
list(APPEND CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_svr>)
endif()

# clrgc is build with standalone+segments
add_library_clr(clrgc SHARED ${GC_SOURCES})
add_library_clr(clrgc SHARED ${GC_SOURCES} ${CLRGC_OBJECTS})
add_dependencies(clrgc eventing_headers)
target_link_libraries(clrgc PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgc PRIVATE gc_dll_wks_descriptor)
Expand Down
99 changes: 11 additions & 88 deletions src/coreclr/gc/allocation.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

allocator::allocator (unsigned int num_b, int fbb, alloc_list* b, int gen)
{
Expand DownExpand Up@@ -1321,27 +1330,6 @@ bool gc_heap::new_allocation_allowed (int gen_number)
return TRUE;
}

inline
ptrdiff_t gc_heap::get_desired_allocation (int gen_number)
{
return dd_desired_allocation (dynamic_data_of (gen_number));
}

inline
ptrdiff_t gc_heap::get_new_allocation (int gen_number)
{
return dd_new_allocation (dynamic_data_of (gen_number));
}

//return the amount allocated so far in gen_number
inline
ptrdiff_t gc_heap::get_allocation (int gen_number)
{
dynamic_data* dd = dynamic_data_of (gen_number);

return dd_desired_allocation (dd) - dd_new_allocation (dd);
}

#ifdef SHORT_PLUGS
inline
void set_padding_in_expand (uint8_t* old_loc,
Expand DownExpand Up@@ -3253,29 +3241,6 @@ allocation_state gc_heap::allocate_soh (int gen_number,
return soh_alloc_state;
}

#ifdef BACKGROUND_GC
inline
void gc_heap::bgc_track_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Increment (&uoh_alloc_thread_count);
dprintf (3, ("h%d: inc lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

inline
void gc_heap::bgc_untrack_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Decrement (&uoh_alloc_thread_count);
dprintf (3, ("h%d: dec lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

#endif //BACKGROUND_GC

size_t gc_heap::get_uoh_seg_size (size_t size)
{
size_t default_seg_size =
Expand DownExpand Up@@ -4551,41 +4516,6 @@ BOOL gc_heap::allocate_more_space(alloc_context* acontext, size_t size,
return (status == a_state_can_allocate);
}

inline
CObjectHeader* gc_heap::allocate (size_t jsize, alloc_context* acontext, uint32_t flags)
{
size_t size = Align (jsize);
assert (size >= Align (min_obj_size));
{
retry:
uint8_t* result = acontext->alloc_ptr;
acontext->alloc_ptr+=size;
if (acontext->alloc_ptr <= acontext->alloc_limit)
{
CObjectHeader* obj = (CObjectHeader*)result;
assert (obj != 0);
return obj;
}
else
{
acontext->alloc_ptr -= size;

#ifdef _MSC_VER
#pragma inline_depth(0)
#endif //_MSC_VER

if (! allocate_more_space (acontext, size, flags, 0))
return 0;

#ifdef _MSC_VER
#pragma inline_depth(20)
#endif //_MSC_VER

goto retry;
}
}
}

void gc_heap::leave_allocation_segment (generation* gen)
{
adjust_limit (0, 0, gen);
Expand DownExpand Up@@ -5417,15 +5347,6 @@ generation* gc_heap::ensure_ephemeral_heap_segment (generation* consing_gen)

#endif //!USE_REGIONS

inline
void gc_heap::init_alloc_info (generation* gen, heap_segment* seg)
{
generation_allocation_segment (gen) = seg;
generation_allocation_pointer (gen) = heap_segment_mem (seg);
generation_allocation_limit (gen) = generation_allocation_pointer (gen);
generation_allocation_context_start_region (gen) = generation_allocation_pointer (gen);
}

inline
heap_segment* gc_heap::get_next_alloc_seg (generation* gen)
{
Expand DownExpand Up@@ -5880,3 +5801,5 @@ CObjectHeader* gc_heap::allocate_uoh_object (size_t jsize, uint32_t flags, int g

return obj;
}

} // namespace SVR/WKS
53 changes: 11 additions & 42 deletions src/coreclr/gc/background.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

// static

Expand DownExpand Up@@ -221,47 +230,6 @@ void gc_heap::concurrent_print_time_delta (const char* msg)
}

#ifdef BACKGROUND_GC
inline
BOOL gc_heap::background_marked (uint8_t* o)
{
return mark_array_marked (o);
}

inline
BOOL gc_heap::background_mark1 (uint8_t* o)
{
BOOL to_mark = !mark_array_marked (o);

dprintf (3, ("b*%zx*b(%d)", (size_t)o, (to_mark ? 1 : 0)));
if (to_mark)
{
mark_array_set_marked (o);
dprintf (4, ("n*%zx*n", (size_t)o));
return TRUE;
}
else
return FALSE;
}

// TODO: we could consider filtering out NULL's here instead of going to
// look for it on other heaps
inline
BOOL gc_heap::background_mark (uint8_t* o, uint8_t* low, uint8_t* high)
{
BOOL marked = FALSE;
if ((o >= low) && (o < high))
marked = background_mark1 (o);
#ifdef MULTIPLE_HEAPS
else if (o)
{
gc_heap* hp = heap_of (o);
assert (hp);
if ((o >= hp->background_saved_lowest_address) && (o < hp->background_saved_highest_address))
marked = background_mark1 (o);
}
#endif //MULTIPLE_HEAPS
return marked;
}

#ifdef USE_REGIONS
void gc_heap::set_background_overflow_p (uint8_t* oo)
Expand DownExpand Up@@ -3465,7 +3433,6 @@ void gc_heap::process_background_segment_end (heap_segment* seg,
bgc_verify_mark_array_cleared (seg);
}

inline
BOOL gc_heap::fgc_should_consider_object (uint8_t* o,
heap_segment* seg,
BOOL consider_bgc_mark_p,
Expand DownExpand Up@@ -4611,3 +4578,5 @@ size_t gc_heap::get_mark_array_size (heap_segment* seg)
}

#endif //USE_REGIONS

} // namespace WKS/SVR
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/coreclr/dlls/mscoree/coreclr/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -179,12 +179,14 @@ if(TARGET coreclr)
$<TARGET_NAME_IF_EXISTS:coreclrpal>
${CLRJIT_STATIC}
${CLRINTERPRETER_STATIC}
vm_gc_wks
$<TARGET_NAME_IF_EXISTS:vm_gc_svr>
cee_wks_core
cee_wks
${FOUNDATION})
endif()

target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} vm_gc_wks $<TARGET_NAME_IF_EXISTS:vm_gc_svr> cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_compile_definitions(coreclr_static PUBLIC CORECLR_EMBEDDED)

if(FEATURE_INPROC_CRASHREPORT AND NOT CLR_CROSS_COMPONENTS_BUILD)
Expand Down
59 changes: 53 additions & 6 deletions src/coreclr/gc/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,16 +11,12 @@ set(GC_SOURCES
gcconfig.cpp
gccommon.cpp
gcscan.cpp
gcsvr.cpp
gcwks.cpp
handletable.cpp
handletablecore.cpp
handletablescan.cpp
objecthandle.cpp
softwarewritewatch.cpp
gchandletable.cpp
gceesvr.cpp
gceewks.cpp
gcload.cpp
gcbridge.cpp
handletablecache.cpp)
Expand DownExpand Up@@ -57,6 +53,7 @@ if (CLR_CMAKE_TARGET_WIN32)
env/gcenv.windows.inl
env/volatile.h
gc.h
gcinternal.h
gcconfig.h
gcbridge.h
gcdesc.h
Expand DownExpand Up@@ -105,14 +102,52 @@ list(APPEND GC_SOURCES ${GC_HEADERS})

convert_to_absolute_path(GC_SOURCES ${GC_SOURCES})

set(GC_WKS_SVR_SOURCES
gcee.cpp
gc.cpp
init.cpp
no_gc.cpp
finalization.cpp
dynamic_tuning.cpp
region_free_list.cpp
region_allocator.cpp
memory.cpp
sweep.cpp
collect.cpp
diagnostics.cpp
dynamic_heap_count.cpp
card_table.cpp
relocate_compact.cpp
mark_phase.cpp
background.cpp
interface.cpp
allocation.cpp
plan_phase.cpp
regions_segments.cpp)

if(FEATURE_STANDALONE_GC)
if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64)
set(BUILD_EXP_GC 1)
endif()

# clrgcexp is build with standalone+regions
if (BUILD_EXP_GC)
add_library_clr(clrgcexp SHARED ${GC_SOURCES})
add_library_clr(clrgcexp_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_wks PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_wks eventing_headers)
target_compile_definitions(clrgcexp_gc_wks PRIVATE USE_REGIONS)
set(CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_wks>)
if (FEATURE_SVR_GC)
add_library_clr(clrgcexp_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_svr PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_svr eventing_headers)
target_compile_definitions(clrgcexp_gc_svr PRIVATE SERVER_GC USE_REGIONS)
list(APPEND CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_svr>)
endif()

add_library_clr(clrgcexp SHARED ${GC_SOURCES} ${CLRGGCEXP_OBJECTS})
add_dependencies(clrgcexp eventing_headers)
target_link_libraries(clrgcexp PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgcexp PRIVATE gcexp_dll_wks_descriptor)
Expand All@@ -123,8 +158,20 @@ if(FEATURE_STANDALONE_GC)
install_clr(TARGETS clrgcexp DESTINATIONS . COMPONENT runtime)
endif (BUILD_EXP_GC)

add_library_clr(clrgc_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_wks eventing_headers)
set(CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_wks>)
if(FEATURE_SVR_GC)
add_library_clr(clrgc_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_svr eventing_headers)
target_compile_definitions(clrgc_gc_svr PRIVATE SERVER_GC)
list(APPEND CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_svr>)
endif()

# clrgc is build with standalone+segments
add_library_clr(clrgc SHARED ${GC_SOURCES})
add_library_clr(clrgc SHARED ${GC_SOURCES} ${CLRGC_OBJECTS})
add_dependencies(clrgc eventing_headers)
target_link_libraries(clrgc PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgc PRIVATE gc_dll_wks_descriptor)
Expand Down
99 changes: 11 additions & 88 deletions src/coreclr/gc/allocation.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

allocator::allocator (unsigned int num_b, int fbb, alloc_list* b, int gen)
{
Expand DownExpand Up@@ -1321,27 +1330,6 @@ bool gc_heap::new_allocation_allowed (int gen_number)
return TRUE;
}

inline
ptrdiff_t gc_heap::get_desired_allocation (int gen_number)
{
return dd_desired_allocation (dynamic_data_of (gen_number));
}

inline
ptrdiff_t gc_heap::get_new_allocation (int gen_number)
{
return dd_new_allocation (dynamic_data_of (gen_number));
}

//return the amount allocated so far in gen_number
inline
ptrdiff_t gc_heap::get_allocation (int gen_number)
{
dynamic_data* dd = dynamic_data_of (gen_number);

return dd_desired_allocation (dd) - dd_new_allocation (dd);
}

#ifdef SHORT_PLUGS
inline
void set_padding_in_expand (uint8_t* old_loc,
Expand DownExpand Up@@ -3253,29 +3241,6 @@ allocation_state gc_heap::allocate_soh (int gen_number,
return soh_alloc_state;
}

#ifdef BACKGROUND_GC
inline
void gc_heap::bgc_track_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Increment (&uoh_alloc_thread_count);
dprintf (3, ("h%d: inc lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

inline
void gc_heap::bgc_untrack_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Decrement (&uoh_alloc_thread_count);
dprintf (3, ("h%d: dec lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

#endif //BACKGROUND_GC

size_t gc_heap::get_uoh_seg_size (size_t size)
{
size_t default_seg_size =
Expand DownExpand Up@@ -4551,41 +4516,6 @@ BOOL gc_heap::allocate_more_space(alloc_context* acontext, size_t size,
return (status == a_state_can_allocate);
}

inline
CObjectHeader* gc_heap::allocate (size_t jsize, alloc_context* acontext, uint32_t flags)
{
size_t size = Align (jsize);
assert (size >= Align (min_obj_size));
{
retry:
uint8_t* result = acontext->alloc_ptr;
acontext->alloc_ptr+=size;
if (acontext->alloc_ptr <= acontext->alloc_limit)
{
CObjectHeader* obj = (CObjectHeader*)result;
assert (obj != 0);
return obj;
}
else
{
acontext->alloc_ptr -= size;

#ifdef _MSC_VER
#pragma inline_depth(0)
#endif //_MSC_VER

if (! allocate_more_space (acontext, size, flags, 0))
return 0;

#ifdef _MSC_VER
#pragma inline_depth(20)
#endif //_MSC_VER

goto retry;
}
}
}

void gc_heap::leave_allocation_segment (generation* gen)
{
adjust_limit (0, 0, gen);
Expand DownExpand Up@@ -5417,15 +5347,6 @@ generation* gc_heap::ensure_ephemeral_heap_segment (generation* consing_gen)

#endif //!USE_REGIONS

inline
void gc_heap::init_alloc_info (generation* gen, heap_segment* seg)
{
generation_allocation_segment (gen) = seg;
generation_allocation_pointer (gen) = heap_segment_mem (seg);
generation_allocation_limit (gen) = generation_allocation_pointer (gen);
generation_allocation_context_start_region (gen) = generation_allocation_pointer (gen);
}

inline
heap_segment* gc_heap::get_next_alloc_seg (generation* gen)
{
Expand DownExpand Up@@ -5880,3 +5801,5 @@ CObjectHeader* gc_heap::allocate_uoh_object (size_t jsize, uint32_t flags, int g

return obj;
}

} // namespace SVR/WKS
53 changes: 11 additions & 42 deletions src/coreclr/gc/background.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

// static

Expand DownExpand Up@@ -221,47 +230,6 @@ void gc_heap::concurrent_print_time_delta (const char* msg)
}

#ifdef BACKGROUND_GC
inline
BOOL gc_heap::background_marked (uint8_t* o)
{
return mark_array_marked (o);
}

inline
BOOL gc_heap::background_mark1 (uint8_t* o)
{
BOOL to_mark = !mark_array_marked (o);

dprintf (3, ("b*%zx*b(%d)", (size_t)o, (to_mark ? 1 : 0)));
if (to_mark)
{
mark_array_set_marked (o);
dprintf (4, ("n*%zx*n", (size_t)o));
return TRUE;
}
else
return FALSE;
}

// TODO: we could consider filtering out NULL's here instead of going to
// look for it on other heaps
inline
BOOL gc_heap::background_mark (uint8_t* o, uint8_t* low, uint8_t* high)
{
BOOL marked = FALSE;
if ((o >= low) && (o < high))
marked = background_mark1 (o);
#ifdef MULTIPLE_HEAPS
else if (o)
{
gc_heap* hp = heap_of (o);
assert (hp);
if ((o >= hp->background_saved_lowest_address) && (o < hp->background_saved_highest_address))
marked = background_mark1 (o);
}
#endif //MULTIPLE_HEAPS
return marked;
}

#ifdef USE_REGIONS
void gc_heap::set_background_overflow_p (uint8_t* oo)
Expand DownExpand Up@@ -3465,7 +3433,6 @@ void gc_heap::process_background_segment_end (heap_segment* seg,
bgc_verify_mark_array_cleared (seg);
}

inline
BOOL gc_heap::fgc_should_consider_object (uint8_t* o,
heap_segment* seg,
BOOL consider_bgc_mark_p,
Expand DownExpand Up@@ -4611,3 +4578,5 @@ size_t gc_heap::get_mark_array_size (heap_segment* seg)
}

#endif //USE_REGIONS

} // namespace WKS/SVR
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/coreclr/dlls/mscoree/coreclr/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -179,12 +179,14 @@ if(TARGET coreclr)
$<TARGET_NAME_IF_EXISTS:coreclrpal>
${CLRJIT_STATIC}
${CLRINTERPRETER_STATIC}
vm_gc_wks
$<TARGET_NAME_IF_EXISTS:vm_gc_svr>
cee_wks_core
cee_wks
${FOUNDATION})
endif()

target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} vm_gc_wks $<TARGET_NAME_IF_EXISTS:vm_gc_svr> cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_compile_definitions(coreclr_static PUBLIC CORECLR_EMBEDDED)

if(FEATURE_INPROC_CRASHREPORT AND NOT CLR_CROSS_COMPONENTS_BUILD)
Expand Down
59 changes: 53 additions & 6 deletions src/coreclr/gc/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,16 +11,12 @@ set(GC_SOURCES
gcconfig.cpp
gccommon.cpp
gcscan.cpp
gcsvr.cpp
gcwks.cpp
handletable.cpp
handletablecore.cpp
handletablescan.cpp
objecthandle.cpp
softwarewritewatch.cpp
gchandletable.cpp
gceesvr.cpp
gceewks.cpp
gcload.cpp
gcbridge.cpp
handletablecache.cpp)
Expand DownExpand Up@@ -57,6 +53,7 @@ if (CLR_CMAKE_TARGET_WIN32)
env/gcenv.windows.inl
env/volatile.h
gc.h
gcinternal.h
gcconfig.h
gcbridge.h
gcdesc.h
Expand DownExpand Up@@ -105,14 +102,52 @@ list(APPEND GC_SOURCES ${GC_HEADERS})

convert_to_absolute_path(GC_SOURCES ${GC_SOURCES})

set(GC_WKS_SVR_SOURCES
gcee.cpp
gc.cpp
init.cpp
no_gc.cpp
finalization.cpp
dynamic_tuning.cpp
region_free_list.cpp
region_allocator.cpp
memory.cpp
sweep.cpp
collect.cpp
diagnostics.cpp
dynamic_heap_count.cpp
card_table.cpp
relocate_compact.cpp
mark_phase.cpp
background.cpp
interface.cpp
allocation.cpp
plan_phase.cpp
regions_segments.cpp)

if(FEATURE_STANDALONE_GC)
if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64)
set(BUILD_EXP_GC 1)
endif()

# clrgcexp is build with standalone+regions
if (BUILD_EXP_GC)
add_library_clr(clrgcexp SHARED ${GC_SOURCES})
add_library_clr(clrgcexp_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_wks PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_wks eventing_headers)
target_compile_definitions(clrgcexp_gc_wks PRIVATE USE_REGIONS)
set(CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_wks>)
if (FEATURE_SVR_GC)
add_library_clr(clrgcexp_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_svr PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_svr eventing_headers)
target_compile_definitions(clrgcexp_gc_svr PRIVATE SERVER_GC USE_REGIONS)
list(APPEND CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_svr>)
endif()

add_library_clr(clrgcexp SHARED ${GC_SOURCES} ${CLRGGCEXP_OBJECTS})
add_dependencies(clrgcexp eventing_headers)
target_link_libraries(clrgcexp PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgcexp PRIVATE gcexp_dll_wks_descriptor)
Expand All@@ -123,8 +158,20 @@ if(FEATURE_STANDALONE_GC)
install_clr(TARGETS clrgcexp DESTINATIONS . COMPONENT runtime)
endif (BUILD_EXP_GC)

add_library_clr(clrgc_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_wks eventing_headers)
set(CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_wks>)
if(FEATURE_SVR_GC)
add_library_clr(clrgc_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_svr eventing_headers)
target_compile_definitions(clrgc_gc_svr PRIVATE SERVER_GC)
list(APPEND CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_svr>)
endif()

# clrgc is build with standalone+segments
add_library_clr(clrgc SHARED ${GC_SOURCES})
add_library_clr(clrgc SHARED ${GC_SOURCES} ${CLRGC_OBJECTS})
add_dependencies(clrgc eventing_headers)
target_link_libraries(clrgc PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgc PRIVATE gc_dll_wks_descriptor)
Expand Down
99 changes: 11 additions & 88 deletions src/coreclr/gc/allocation.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

allocator::allocator (unsigned int num_b, int fbb, alloc_list* b, int gen)
{
Expand DownExpand Up@@ -1321,27 +1330,6 @@ bool gc_heap::new_allocation_allowed (int gen_number)
return TRUE;
}

inline
ptrdiff_t gc_heap::get_desired_allocation (int gen_number)
{
return dd_desired_allocation (dynamic_data_of (gen_number));
}

inline
ptrdiff_t gc_heap::get_new_allocation (int gen_number)
{
return dd_new_allocation (dynamic_data_of (gen_number));
}

//return the amount allocated so far in gen_number
inline
ptrdiff_t gc_heap::get_allocation (int gen_number)
{
dynamic_data* dd = dynamic_data_of (gen_number);

return dd_desired_allocation (dd) - dd_new_allocation (dd);
}

#ifdef SHORT_PLUGS
inline
void set_padding_in_expand (uint8_t* old_loc,
Expand DownExpand Up@@ -3253,29 +3241,6 @@ allocation_state gc_heap::allocate_soh (int gen_number,
return soh_alloc_state;
}

#ifdef BACKGROUND_GC
inline
void gc_heap::bgc_track_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Increment (&uoh_alloc_thread_count);
dprintf (3, ("h%d: inc lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

inline
void gc_heap::bgc_untrack_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Decrement (&uoh_alloc_thread_count);
dprintf (3, ("h%d: dec lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

#endif //BACKGROUND_GC

size_t gc_heap::get_uoh_seg_size (size_t size)
{
size_t default_seg_size =
Expand DownExpand Up@@ -4551,41 +4516,6 @@ BOOL gc_heap::allocate_more_space(alloc_context* acontext, size_t size,
return (status == a_state_can_allocate);
}

inline
CObjectHeader* gc_heap::allocate (size_t jsize, alloc_context* acontext, uint32_t flags)
{
size_t size = Align (jsize);
assert (size >= Align (min_obj_size));
{
retry:
uint8_t* result = acontext->alloc_ptr;
acontext->alloc_ptr+=size;
if (acontext->alloc_ptr <= acontext->alloc_limit)
{
CObjectHeader* obj = (CObjectHeader*)result;
assert (obj != 0);
return obj;
}
else
{
acontext->alloc_ptr -= size;

#ifdef _MSC_VER
#pragma inline_depth(0)
#endif //_MSC_VER

if (! allocate_more_space (acontext, size, flags, 0))
return 0;

#ifdef _MSC_VER
#pragma inline_depth(20)
#endif //_MSC_VER

goto retry;
}
}
}

void gc_heap::leave_allocation_segment (generation* gen)
{
adjust_limit (0, 0, gen);
Expand DownExpand Up@@ -5417,15 +5347,6 @@ generation* gc_heap::ensure_ephemeral_heap_segment (generation* consing_gen)

#endif //!USE_REGIONS

inline
void gc_heap::init_alloc_info (generation* gen, heap_segment* seg)
{
generation_allocation_segment (gen) = seg;
generation_allocation_pointer (gen) = heap_segment_mem (seg);
generation_allocation_limit (gen) = generation_allocation_pointer (gen);
generation_allocation_context_start_region (gen) = generation_allocation_pointer (gen);
}

inline
heap_segment* gc_heap::get_next_alloc_seg (generation* gen)
{
Expand DownExpand Up@@ -5880,3 +5801,5 @@ CObjectHeader* gc_heap::allocate_uoh_object (size_t jsize, uint32_t flags, int g

return obj;
}

} // namespace SVR/WKS
53 changes: 11 additions & 42 deletions src/coreclr/gc/background.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

// static

Expand DownExpand Up@@ -221,47 +230,6 @@ void gc_heap::concurrent_print_time_delta (const char* msg)
}

#ifdef BACKGROUND_GC
inline
BOOL gc_heap::background_marked (uint8_t* o)
{
return mark_array_marked (o);
}

inline
BOOL gc_heap::background_mark1 (uint8_t* o)
{
BOOL to_mark = !mark_array_marked (o);

dprintf (3, ("b*%zx*b(%d)", (size_t)o, (to_mark ? 1 : 0)));
if (to_mark)
{
mark_array_set_marked (o);
dprintf (4, ("n*%zx*n", (size_t)o));
return TRUE;
}
else
return FALSE;
}

// TODO: we could consider filtering out NULL's here instead of going to
// look for it on other heaps
inline
BOOL gc_heap::background_mark (uint8_t* o, uint8_t* low, uint8_t* high)
{
BOOL marked = FALSE;
if ((o >= low) && (o < high))
marked = background_mark1 (o);
#ifdef MULTIPLE_HEAPS
else if (o)
{
gc_heap* hp = heap_of (o);
assert (hp);
if ((o >= hp->background_saved_lowest_address) && (o < hp->background_saved_highest_address))
marked = background_mark1 (o);
}
#endif //MULTIPLE_HEAPS
return marked;
}

#ifdef USE_REGIONS
void gc_heap::set_background_overflow_p (uint8_t* oo)
Expand DownExpand Up@@ -3465,7 +3433,6 @@ void gc_heap::process_background_segment_end (heap_segment* seg,
bgc_verify_mark_array_cleared (seg);
}

inline
BOOL gc_heap::fgc_should_consider_object (uint8_t* o,
heap_segment* seg,
BOOL consider_bgc_mark_p,
Expand DownExpand Up@@ -4611,3 +4578,5 @@ size_t gc_heap::get_mark_array_size (heap_segment* seg)
}

#endif //USE_REGIONS

} // namespace WKS/SVR
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/coreclr/dlls/mscoree/coreclr/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -179,12 +179,14 @@ if(TARGET coreclr)
$<TARGET_NAME_IF_EXISTS:coreclrpal>
${CLRJIT_STATIC}
${CLRINTERPRETER_STATIC}
vm_gc_wks
$<TARGET_NAME_IF_EXISTS:vm_gc_svr>
cee_wks_core
cee_wks
${FOUNDATION})
endif()

target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} vm_gc_wks $<TARGET_NAME_IF_EXISTS:vm_gc_svr> cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_compile_definitions(coreclr_static PUBLIC CORECLR_EMBEDDED)

if(FEATURE_INPROC_CRASHREPORT AND NOT CLR_CROSS_COMPONENTS_BUILD)
Expand Down
59 changes: 53 additions & 6 deletions src/coreclr/gc/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,16 +11,12 @@ set(GC_SOURCES
gcconfig.cpp
gccommon.cpp
gcscan.cpp
gcsvr.cpp
gcwks.cpp
handletable.cpp
handletablecore.cpp
handletablescan.cpp
objecthandle.cpp
softwarewritewatch.cpp
gchandletable.cpp
gceesvr.cpp
gceewks.cpp
gcload.cpp
gcbridge.cpp
handletablecache.cpp)
Expand DownExpand Up@@ -57,6 +53,7 @@ if (CLR_CMAKE_TARGET_WIN32)
env/gcenv.windows.inl
env/volatile.h
gc.h
gcinternal.h
gcconfig.h
gcbridge.h
gcdesc.h
Expand DownExpand Up@@ -105,14 +102,52 @@ list(APPEND GC_SOURCES ${GC_HEADERS})

convert_to_absolute_path(GC_SOURCES ${GC_SOURCES})

set(GC_WKS_SVR_SOURCES
gcee.cpp
gc.cpp
init.cpp
no_gc.cpp
finalization.cpp
dynamic_tuning.cpp
region_free_list.cpp
region_allocator.cpp
memory.cpp
sweep.cpp
collect.cpp
diagnostics.cpp
dynamic_heap_count.cpp
card_table.cpp
relocate_compact.cpp
mark_phase.cpp
background.cpp
interface.cpp
allocation.cpp
plan_phase.cpp
regions_segments.cpp)

if(FEATURE_STANDALONE_GC)
if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64)
set(BUILD_EXP_GC 1)
endif()

# clrgcexp is build with standalone+regions
if (BUILD_EXP_GC)
add_library_clr(clrgcexp SHARED ${GC_SOURCES})
add_library_clr(clrgcexp_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_wks PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_wks eventing_headers)
target_compile_definitions(clrgcexp_gc_wks PRIVATE USE_REGIONS)
set(CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_wks>)
if (FEATURE_SVR_GC)
add_library_clr(clrgcexp_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_svr PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_svr eventing_headers)
target_compile_definitions(clrgcexp_gc_svr PRIVATE SERVER_GC USE_REGIONS)
list(APPEND CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_svr>)
endif()

add_library_clr(clrgcexp SHARED ${GC_SOURCES} ${CLRGGCEXP_OBJECTS})
add_dependencies(clrgcexp eventing_headers)
target_link_libraries(clrgcexp PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgcexp PRIVATE gcexp_dll_wks_descriptor)
Expand All@@ -123,8 +158,20 @@ if(FEATURE_STANDALONE_GC)
install_clr(TARGETS clrgcexp DESTINATIONS . COMPONENT runtime)
endif (BUILD_EXP_GC)

add_library_clr(clrgc_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_wks eventing_headers)
set(CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_wks>)
if(FEATURE_SVR_GC)
add_library_clr(clrgc_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_svr eventing_headers)
target_compile_definitions(clrgc_gc_svr PRIVATE SERVER_GC)
list(APPEND CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_svr>)
endif()

# clrgc is build with standalone+segments
add_library_clr(clrgc SHARED ${GC_SOURCES})
add_library_clr(clrgc SHARED ${GC_SOURCES} ${CLRGC_OBJECTS})
add_dependencies(clrgc eventing_headers)
target_link_libraries(clrgc PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgc PRIVATE gc_dll_wks_descriptor)
Expand Down
99 changes: 11 additions & 88 deletions src/coreclr/gc/allocation.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

allocator::allocator (unsigned int num_b, int fbb, alloc_list* b, int gen)
{
Expand DownExpand Up@@ -1321,27 +1330,6 @@ bool gc_heap::new_allocation_allowed (int gen_number)
return TRUE;
}

inline
ptrdiff_t gc_heap::get_desired_allocation (int gen_number)
{
return dd_desired_allocation (dynamic_data_of (gen_number));
}

inline
ptrdiff_t gc_heap::get_new_allocation (int gen_number)
{
return dd_new_allocation (dynamic_data_of (gen_number));
}

//return the amount allocated so far in gen_number
inline
ptrdiff_t gc_heap::get_allocation (int gen_number)
{
dynamic_data* dd = dynamic_data_of (gen_number);

return dd_desired_allocation (dd) - dd_new_allocation (dd);
}

#ifdef SHORT_PLUGS
inline
void set_padding_in_expand (uint8_t* old_loc,
Expand DownExpand Up@@ -3253,29 +3241,6 @@ allocation_state gc_heap::allocate_soh (int gen_number,
return soh_alloc_state;
}

#ifdef BACKGROUND_GC
inline
void gc_heap::bgc_track_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Increment (&uoh_alloc_thread_count);
dprintf (3, ("h%d: inc lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

inline
void gc_heap::bgc_untrack_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Decrement (&uoh_alloc_thread_count);
dprintf (3, ("h%d: dec lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

#endif //BACKGROUND_GC

size_t gc_heap::get_uoh_seg_size (size_t size)
{
size_t default_seg_size =
Expand DownExpand Up@@ -4551,41 +4516,6 @@ BOOL gc_heap::allocate_more_space(alloc_context* acontext, size_t size,
return (status == a_state_can_allocate);
}

inline
CObjectHeader* gc_heap::allocate (size_t jsize, alloc_context* acontext, uint32_t flags)
{
size_t size = Align (jsize);
assert (size >= Align (min_obj_size));
{
retry:
uint8_t* result = acontext->alloc_ptr;
acontext->alloc_ptr+=size;
if (acontext->alloc_ptr <= acontext->alloc_limit)
{
CObjectHeader* obj = (CObjectHeader*)result;
assert (obj != 0);
return obj;
}
else
{
acontext->alloc_ptr -= size;

#ifdef _MSC_VER
#pragma inline_depth(0)
#endif //_MSC_VER

if (! allocate_more_space (acontext, size, flags, 0))
return 0;

#ifdef _MSC_VER
#pragma inline_depth(20)
#endif //_MSC_VER

goto retry;
}
}
}

void gc_heap::leave_allocation_segment (generation* gen)
{
adjust_limit (0, 0, gen);
Expand DownExpand Up@@ -5417,15 +5347,6 @@ generation* gc_heap::ensure_ephemeral_heap_segment (generation* consing_gen)

#endif //!USE_REGIONS

inline
void gc_heap::init_alloc_info (generation* gen, heap_segment* seg)
{
generation_allocation_segment (gen) = seg;
generation_allocation_pointer (gen) = heap_segment_mem (seg);
generation_allocation_limit (gen) = generation_allocation_pointer (gen);
generation_allocation_context_start_region (gen) = generation_allocation_pointer (gen);
}

inline
heap_segment* gc_heap::get_next_alloc_seg (generation* gen)
{
Expand DownExpand Up@@ -5880,3 +5801,5 @@ CObjectHeader* gc_heap::allocate_uoh_object (size_t jsize, uint32_t flags, int g

return obj;
}

} // namespace SVR/WKS
53 changes: 11 additions & 42 deletions src/coreclr/gc/background.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

// static

Expand DownExpand Up@@ -221,47 +230,6 @@ void gc_heap::concurrent_print_time_delta (const char* msg)
}

#ifdef BACKGROUND_GC
inline
BOOL gc_heap::background_marked (uint8_t* o)
{
return mark_array_marked (o);
}

inline
BOOL gc_heap::background_mark1 (uint8_t* o)
{
BOOL to_mark = !mark_array_marked (o);

dprintf (3, ("b*%zx*b(%d)", (size_t)o, (to_mark ? 1 : 0)));
if (to_mark)
{
mark_array_set_marked (o);
dprintf (4, ("n*%zx*n", (size_t)o));
return TRUE;
}
else
return FALSE;
}

// TODO: we could consider filtering out NULL's here instead of going to
// look for it on other heaps
inline
BOOL gc_heap::background_mark (uint8_t* o, uint8_t* low, uint8_t* high)
{
BOOL marked = FALSE;
if ((o >= low) && (o < high))
marked = background_mark1 (o);
#ifdef MULTIPLE_HEAPS
else if (o)
{
gc_heap* hp = heap_of (o);
assert (hp);
if ((o >= hp->background_saved_lowest_address) && (o < hp->background_saved_highest_address))
marked = background_mark1 (o);
}
#endif //MULTIPLE_HEAPS
return marked;
}

#ifdef USE_REGIONS
void gc_heap::set_background_overflow_p (uint8_t* oo)
Expand DownExpand Up@@ -3465,7 +3433,6 @@ void gc_heap::process_background_segment_end (heap_segment* seg,
bgc_verify_mark_array_cleared (seg);
}

inline
BOOL gc_heap::fgc_should_consider_object (uint8_t* o,
heap_segment* seg,
BOOL consider_bgc_mark_p,
Expand DownExpand Up@@ -4611,3 +4578,5 @@ size_t gc_heap::get_mark_array_size (heap_segment* seg)
}

#endif //USE_REGIONS

} // namespace WKS/SVR
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/coreclr/dlls/mscoree/coreclr/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -179,12 +179,14 @@ if(TARGET coreclr)
$<TARGET_NAME_IF_EXISTS:coreclrpal>
${CLRJIT_STATIC}
${CLRINTERPRETER_STATIC}
vm_gc_wks
$<TARGET_NAME_IF_EXISTS:vm_gc_svr>
cee_wks_core
cee_wks
${FOUNDATION})
endif()

target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} vm_gc_wks $<TARGET_NAME_IF_EXISTS:vm_gc_svr> cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_compile_definitions(coreclr_static PUBLIC CORECLR_EMBEDDED)

if(FEATURE_INPROC_CRASHREPORT AND NOT CLR_CROSS_COMPONENTS_BUILD)
Expand Down
59 changes: 53 additions & 6 deletions src/coreclr/gc/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,16 +11,12 @@ set(GC_SOURCES
gcconfig.cpp
gccommon.cpp
gcscan.cpp
gcsvr.cpp
gcwks.cpp
handletable.cpp
handletablecore.cpp
handletablescan.cpp
objecthandle.cpp
softwarewritewatch.cpp
gchandletable.cpp
gceesvr.cpp
gceewks.cpp
gcload.cpp
gcbridge.cpp
handletablecache.cpp)
Expand DownExpand Up@@ -57,6 +53,7 @@ if (CLR_CMAKE_TARGET_WIN32)
env/gcenv.windows.inl
env/volatile.h
gc.h
gcinternal.h
gcconfig.h
gcbridge.h
gcdesc.h
Expand DownExpand Up@@ -105,14 +102,52 @@ list(APPEND GC_SOURCES ${GC_HEADERS})

convert_to_absolute_path(GC_SOURCES ${GC_SOURCES})

set(GC_WKS_SVR_SOURCES
gcee.cpp
gc.cpp
init.cpp
no_gc.cpp
finalization.cpp
dynamic_tuning.cpp
region_free_list.cpp
region_allocator.cpp
memory.cpp
sweep.cpp
collect.cpp
diagnostics.cpp
dynamic_heap_count.cpp
card_table.cpp
relocate_compact.cpp
mark_phase.cpp
background.cpp
interface.cpp
allocation.cpp
plan_phase.cpp
regions_segments.cpp)

if(FEATURE_STANDALONE_GC)
if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64)
set(BUILD_EXP_GC 1)
endif()

# clrgcexp is build with standalone+regions
if (BUILD_EXP_GC)
add_library_clr(clrgcexp SHARED ${GC_SOURCES})
add_library_clr(clrgcexp_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_wks PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_wks eventing_headers)
target_compile_definitions(clrgcexp_gc_wks PRIVATE USE_REGIONS)
set(CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_wks>)
if (FEATURE_SVR_GC)
add_library_clr(clrgcexp_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_svr PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_svr eventing_headers)
target_compile_definitions(clrgcexp_gc_svr PRIVATE SERVER_GC USE_REGIONS)
list(APPEND CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_svr>)
endif()

add_library_clr(clrgcexp SHARED ${GC_SOURCES} ${CLRGGCEXP_OBJECTS})
add_dependencies(clrgcexp eventing_headers)
target_link_libraries(clrgcexp PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgcexp PRIVATE gcexp_dll_wks_descriptor)
Expand All@@ -123,8 +158,20 @@ if(FEATURE_STANDALONE_GC)
install_clr(TARGETS clrgcexp DESTINATIONS . COMPONENT runtime)
endif (BUILD_EXP_GC)

add_library_clr(clrgc_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_wks eventing_headers)
set(CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_wks>)
if(FEATURE_SVR_GC)
add_library_clr(clrgc_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_svr eventing_headers)
target_compile_definitions(clrgc_gc_svr PRIVATE SERVER_GC)
list(APPEND CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_svr>)
endif()

# clrgc is build with standalone+segments
add_library_clr(clrgc SHARED ${GC_SOURCES})
add_library_clr(clrgc SHARED ${GC_SOURCES} ${CLRGC_OBJECTS})
add_dependencies(clrgc eventing_headers)
target_link_libraries(clrgc PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgc PRIVATE gc_dll_wks_descriptor)
Expand Down
99 changes: 11 additions & 88 deletions src/coreclr/gc/allocation.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

allocator::allocator (unsigned int num_b, int fbb, alloc_list* b, int gen)
{
Expand DownExpand Up@@ -1321,27 +1330,6 @@ bool gc_heap::new_allocation_allowed (int gen_number)
return TRUE;
}

inline
ptrdiff_t gc_heap::get_desired_allocation (int gen_number)
{
return dd_desired_allocation (dynamic_data_of (gen_number));
}

inline
ptrdiff_t gc_heap::get_new_allocation (int gen_number)
{
return dd_new_allocation (dynamic_data_of (gen_number));
}

//return the amount allocated so far in gen_number
inline
ptrdiff_t gc_heap::get_allocation (int gen_number)
{
dynamic_data* dd = dynamic_data_of (gen_number);

return dd_desired_allocation (dd) - dd_new_allocation (dd);
}

#ifdef SHORT_PLUGS
inline
void set_padding_in_expand (uint8_t* old_loc,
Expand DownExpand Up@@ -3253,29 +3241,6 @@ allocation_state gc_heap::allocate_soh (int gen_number,
return soh_alloc_state;
}

#ifdef BACKGROUND_GC
inline
void gc_heap::bgc_track_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Increment (&uoh_alloc_thread_count);
dprintf (3, ("h%d: inc lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

inline
void gc_heap::bgc_untrack_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Decrement (&uoh_alloc_thread_count);
dprintf (3, ("h%d: dec lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

#endif //BACKGROUND_GC

size_t gc_heap::get_uoh_seg_size (size_t size)
{
size_t default_seg_size =
Expand DownExpand Up@@ -4551,41 +4516,6 @@ BOOL gc_heap::allocate_more_space(alloc_context* acontext, size_t size,
return (status == a_state_can_allocate);
}

inline
CObjectHeader* gc_heap::allocate (size_t jsize, alloc_context* acontext, uint32_t flags)
{
size_t size = Align (jsize);
assert (size >= Align (min_obj_size));
{
retry:
uint8_t* result = acontext->alloc_ptr;
acontext->alloc_ptr+=size;
if (acontext->alloc_ptr <= acontext->alloc_limit)
{
CObjectHeader* obj = (CObjectHeader*)result;
assert (obj != 0);
return obj;
}
else
{
acontext->alloc_ptr -= size;

#ifdef _MSC_VER
#pragma inline_depth(0)
#endif //_MSC_VER

if (! allocate_more_space (acontext, size, flags, 0))
return 0;

#ifdef _MSC_VER
#pragma inline_depth(20)
#endif //_MSC_VER

goto retry;
}
}
}

void gc_heap::leave_allocation_segment (generation* gen)
{
adjust_limit (0, 0, gen);
Expand DownExpand Up@@ -5417,15 +5347,6 @@ generation* gc_heap::ensure_ephemeral_heap_segment (generation* consing_gen)

#endif //!USE_REGIONS

inline
void gc_heap::init_alloc_info (generation* gen, heap_segment* seg)
{
generation_allocation_segment (gen) = seg;
generation_allocation_pointer (gen) = heap_segment_mem (seg);
generation_allocation_limit (gen) = generation_allocation_pointer (gen);
generation_allocation_context_start_region (gen) = generation_allocation_pointer (gen);
}

inline
heap_segment* gc_heap::get_next_alloc_seg (generation* gen)
{
Expand DownExpand Up@@ -5880,3 +5801,5 @@ CObjectHeader* gc_heap::allocate_uoh_object (size_t jsize, uint32_t flags, int g

return obj;
}

} // namespace SVR/WKS
53 changes: 11 additions & 42 deletions src/coreclr/gc/background.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

// static

Expand DownExpand Up@@ -221,47 +230,6 @@ void gc_heap::concurrent_print_time_delta (const char* msg)
}

#ifdef BACKGROUND_GC
inline
BOOL gc_heap::background_marked (uint8_t* o)
{
return mark_array_marked (o);
}

inline
BOOL gc_heap::background_mark1 (uint8_t* o)
{
BOOL to_mark = !mark_array_marked (o);

dprintf (3, ("b*%zx*b(%d)", (size_t)o, (to_mark ? 1 : 0)));
if (to_mark)
{
mark_array_set_marked (o);
dprintf (4, ("n*%zx*n", (size_t)o));
return TRUE;
}
else
return FALSE;
}

// TODO: we could consider filtering out NULL's here instead of going to
// look for it on other heaps
inline
BOOL gc_heap::background_mark (uint8_t* o, uint8_t* low, uint8_t* high)
{
BOOL marked = FALSE;
if ((o >= low) && (o < high))
marked = background_mark1 (o);
#ifdef MULTIPLE_HEAPS
else if (o)
{
gc_heap* hp = heap_of (o);
assert (hp);
if ((o >= hp->background_saved_lowest_address) && (o < hp->background_saved_highest_address))
marked = background_mark1 (o);
}
#endif //MULTIPLE_HEAPS
return marked;
}

#ifdef USE_REGIONS
void gc_heap::set_background_overflow_p (uint8_t* oo)
Expand DownExpand Up@@ -3465,7 +3433,6 @@ void gc_heap::process_background_segment_end (heap_segment* seg,
bgc_verify_mark_array_cleared (seg);
}

inline
BOOL gc_heap::fgc_should_consider_object (uint8_t* o,
heap_segment* seg,
BOOL consider_bgc_mark_p,
Expand DownExpand Up@@ -4611,3 +4578,5 @@ size_t gc_heap::get_mark_array_size (heap_segment* seg)
}

#endif //USE_REGIONS

} // namespace WKS/SVR
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/coreclr/dlls/mscoree/coreclr/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -179,12 +179,14 @@ if(TARGET coreclr)
$<TARGET_NAME_IF_EXISTS:coreclrpal>
${CLRJIT_STATIC}
${CLRINTERPRETER_STATIC}
vm_gc_wks
$<TARGET_NAME_IF_EXISTS:vm_gc_svr>
cee_wks_core
cee_wks
${FOUNDATION})
endif()

target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} vm_gc_wks $<TARGET_NAME_IF_EXISTS:vm_gc_svr> cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_compile_definitions(coreclr_static PUBLIC CORECLR_EMBEDDED)

if(FEATURE_INPROC_CRASHREPORT AND NOT CLR_CROSS_COMPONENTS_BUILD)
Expand Down
59 changes: 53 additions & 6 deletions src/coreclr/gc/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,16 +11,12 @@ set(GC_SOURCES
gcconfig.cpp
gccommon.cpp
gcscan.cpp
gcsvr.cpp
gcwks.cpp
handletable.cpp
handletablecore.cpp
handletablescan.cpp
objecthandle.cpp
softwarewritewatch.cpp
gchandletable.cpp
gceesvr.cpp
gceewks.cpp
gcload.cpp
gcbridge.cpp
handletablecache.cpp)
Expand DownExpand Up@@ -57,6 +53,7 @@ if (CLR_CMAKE_TARGET_WIN32)
env/gcenv.windows.inl
env/volatile.h
gc.h
gcinternal.h
gcconfig.h
gcbridge.h
gcdesc.h
Expand DownExpand Up@@ -105,14 +102,52 @@ list(APPEND GC_SOURCES ${GC_HEADERS})

convert_to_absolute_path(GC_SOURCES ${GC_SOURCES})

set(GC_WKS_SVR_SOURCES
gcee.cpp
gc.cpp
init.cpp
no_gc.cpp
finalization.cpp
dynamic_tuning.cpp
region_free_list.cpp
region_allocator.cpp
memory.cpp
sweep.cpp
collect.cpp
diagnostics.cpp
dynamic_heap_count.cpp
card_table.cpp
relocate_compact.cpp
mark_phase.cpp
background.cpp
interface.cpp
allocation.cpp
plan_phase.cpp
regions_segments.cpp)

if(FEATURE_STANDALONE_GC)
if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64)
set(BUILD_EXP_GC 1)
endif()

# clrgcexp is build with standalone+regions
if (BUILD_EXP_GC)
add_library_clr(clrgcexp SHARED ${GC_SOURCES})
add_library_clr(clrgcexp_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_wks PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_wks eventing_headers)
target_compile_definitions(clrgcexp_gc_wks PRIVATE USE_REGIONS)
set(CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_wks>)
if (FEATURE_SVR_GC)
add_library_clr(clrgcexp_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_svr PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_svr eventing_headers)
target_compile_definitions(clrgcexp_gc_svr PRIVATE SERVER_GC USE_REGIONS)
list(APPEND CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_svr>)
endif()

add_library_clr(clrgcexp SHARED ${GC_SOURCES} ${CLRGGCEXP_OBJECTS})
add_dependencies(clrgcexp eventing_headers)
target_link_libraries(clrgcexp PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgcexp PRIVATE gcexp_dll_wks_descriptor)
Expand All@@ -123,8 +158,20 @@ if(FEATURE_STANDALONE_GC)
install_clr(TARGETS clrgcexp DESTINATIONS . COMPONENT runtime)
endif (BUILD_EXP_GC)

add_library_clr(clrgc_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_wks eventing_headers)
set(CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_wks>)
if(FEATURE_SVR_GC)
add_library_clr(clrgc_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_svr eventing_headers)
target_compile_definitions(clrgc_gc_svr PRIVATE SERVER_GC)
list(APPEND CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_svr>)
endif()

# clrgc is build with standalone+segments
add_library_clr(clrgc SHARED ${GC_SOURCES})
add_library_clr(clrgc SHARED ${GC_SOURCES} ${CLRGC_OBJECTS})
add_dependencies(clrgc eventing_headers)
target_link_libraries(clrgc PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgc PRIVATE gc_dll_wks_descriptor)
Expand Down
99 changes: 11 additions & 88 deletions src/coreclr/gc/allocation.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

allocator::allocator (unsigned int num_b, int fbb, alloc_list* b, int gen)
{
Expand DownExpand Up@@ -1321,27 +1330,6 @@ bool gc_heap::new_allocation_allowed (int gen_number)
return TRUE;
}

inline
ptrdiff_t gc_heap::get_desired_allocation (int gen_number)
{
return dd_desired_allocation (dynamic_data_of (gen_number));
}

inline
ptrdiff_t gc_heap::get_new_allocation (int gen_number)
{
return dd_new_allocation (dynamic_data_of (gen_number));
}

//return the amount allocated so far in gen_number
inline
ptrdiff_t gc_heap::get_allocation (int gen_number)
{
dynamic_data* dd = dynamic_data_of (gen_number);

return dd_desired_allocation (dd) - dd_new_allocation (dd);
}

#ifdef SHORT_PLUGS
inline
void set_padding_in_expand (uint8_t* old_loc,
Expand DownExpand Up@@ -3253,29 +3241,6 @@ allocation_state gc_heap::allocate_soh (int gen_number,
return soh_alloc_state;
}

#ifdef BACKGROUND_GC
inline
void gc_heap::bgc_track_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Increment (&uoh_alloc_thread_count);
dprintf (3, ("h%d: inc lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

inline
void gc_heap::bgc_untrack_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Decrement (&uoh_alloc_thread_count);
dprintf (3, ("h%d: dec lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

#endif //BACKGROUND_GC

size_t gc_heap::get_uoh_seg_size (size_t size)
{
size_t default_seg_size =
Expand DownExpand Up@@ -4551,41 +4516,6 @@ BOOL gc_heap::allocate_more_space(alloc_context* acontext, size_t size,
return (status == a_state_can_allocate);
}

inline
CObjectHeader* gc_heap::allocate (size_t jsize, alloc_context* acontext, uint32_t flags)
{
size_t size = Align (jsize);
assert (size >= Align (min_obj_size));
{
retry:
uint8_t* result = acontext->alloc_ptr;
acontext->alloc_ptr+=size;
if (acontext->alloc_ptr <= acontext->alloc_limit)
{
CObjectHeader* obj = (CObjectHeader*)result;
assert (obj != 0);
return obj;
}
else
{
acontext->alloc_ptr -= size;

#ifdef _MSC_VER
#pragma inline_depth(0)
#endif //_MSC_VER

if (! allocate_more_space (acontext, size, flags, 0))
return 0;

#ifdef _MSC_VER
#pragma inline_depth(20)
#endif //_MSC_VER

goto retry;
}
}
}

void gc_heap::leave_allocation_segment (generation* gen)
{
adjust_limit (0, 0, gen);
Expand DownExpand Up@@ -5417,15 +5347,6 @@ generation* gc_heap::ensure_ephemeral_heap_segment (generation* consing_gen)

#endif //!USE_REGIONS

inline
void gc_heap::init_alloc_info (generation* gen, heap_segment* seg)
{
generation_allocation_segment (gen) = seg;
generation_allocation_pointer (gen) = heap_segment_mem (seg);
generation_allocation_limit (gen) = generation_allocation_pointer (gen);
generation_allocation_context_start_region (gen) = generation_allocation_pointer (gen);
}

inline
heap_segment* gc_heap::get_next_alloc_seg (generation* gen)
{
Expand DownExpand Up@@ -5880,3 +5801,5 @@ CObjectHeader* gc_heap::allocate_uoh_object (size_t jsize, uint32_t flags, int g

return obj;
}

} // namespace SVR/WKS
53 changes: 11 additions & 42 deletions src/coreclr/gc/background.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

// static

Expand DownExpand Up@@ -221,47 +230,6 @@ void gc_heap::concurrent_print_time_delta (const char* msg)
}

#ifdef BACKGROUND_GC
inline
BOOL gc_heap::background_marked (uint8_t* o)
{
return mark_array_marked (o);
}

inline
BOOL gc_heap::background_mark1 (uint8_t* o)
{
BOOL to_mark = !mark_array_marked (o);

dprintf (3, ("b*%zx*b(%d)", (size_t)o, (to_mark ? 1 : 0)));
if (to_mark)
{
mark_array_set_marked (o);
dprintf (4, ("n*%zx*n", (size_t)o));
return TRUE;
}
else
return FALSE;
}

// TODO: we could consider filtering out NULL's here instead of going to
// look for it on other heaps
inline
BOOL gc_heap::background_mark (uint8_t* o, uint8_t* low, uint8_t* high)
{
BOOL marked = FALSE;
if ((o >= low) && (o < high))
marked = background_mark1 (o);
#ifdef MULTIPLE_HEAPS
else if (o)
{
gc_heap* hp = heap_of (o);
assert (hp);
if ((o >= hp->background_saved_lowest_address) && (o < hp->background_saved_highest_address))
marked = background_mark1 (o);
}
#endif //MULTIPLE_HEAPS
return marked;
}

#ifdef USE_REGIONS
void gc_heap::set_background_overflow_p (uint8_t* oo)
Expand DownExpand Up@@ -3465,7 +3433,6 @@ void gc_heap::process_background_segment_end (heap_segment* seg,
bgc_verify_mark_array_cleared (seg);
}

inline
BOOL gc_heap::fgc_should_consider_object (uint8_t* o,
heap_segment* seg,
BOOL consider_bgc_mark_p,
Expand DownExpand Up@@ -4611,3 +4578,5 @@ size_t gc_heap::get_mark_array_size (heap_segment* seg)
}

#endif //USE_REGIONS

} // namespace WKS/SVR
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/coreclr/dlls/mscoree/coreclr/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -179,12 +179,14 @@ if(TARGET coreclr)
$<TARGET_NAME_IF_EXISTS:coreclrpal>
${CLRJIT_STATIC}
${CLRINTERPRETER_STATIC}
vm_gc_wks
$<TARGET_NAME_IF_EXISTS:vm_gc_svr>
cee_wks_core
cee_wks
${FOUNDATION})
endif()

target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} vm_gc_wks $<TARGET_NAME_IF_EXISTS:vm_gc_svr> cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_compile_definitions(coreclr_static PUBLIC CORECLR_EMBEDDED)

if(FEATURE_INPROC_CRASHREPORT AND NOT CLR_CROSS_COMPONENTS_BUILD)
Expand Down
59 changes: 53 additions & 6 deletions src/coreclr/gc/CMakeLists.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,16 +11,12 @@ set(GC_SOURCES
gcconfig.cpp
gccommon.cpp
gcscan.cpp
gcsvr.cpp
gcwks.cpp
handletable.cpp
handletablecore.cpp
handletablescan.cpp
objecthandle.cpp
softwarewritewatch.cpp
gchandletable.cpp
gceesvr.cpp
gceewks.cpp
gcload.cpp
gcbridge.cpp
handletablecache.cpp)
Expand DownExpand Up@@ -57,6 +53,7 @@ if (CLR_CMAKE_TARGET_WIN32)
env/gcenv.windows.inl
env/volatile.h
gc.h
gcinternal.h
gcconfig.h
gcbridge.h
gcdesc.h
Expand DownExpand Up@@ -105,14 +102,52 @@ list(APPEND GC_SOURCES ${GC_HEADERS})

convert_to_absolute_path(GC_SOURCES ${GC_SOURCES})

set(GC_WKS_SVR_SOURCES
gcee.cpp
gc.cpp
init.cpp
no_gc.cpp
finalization.cpp
dynamic_tuning.cpp
region_free_list.cpp
region_allocator.cpp
memory.cpp
sweep.cpp
collect.cpp
diagnostics.cpp
dynamic_heap_count.cpp
card_table.cpp
relocate_compact.cpp
mark_phase.cpp
background.cpp
interface.cpp
allocation.cpp
plan_phase.cpp
regions_segments.cpp)

if(FEATURE_STANDALONE_GC)
if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64)
set(BUILD_EXP_GC 1)
endif()

# clrgcexp is build with standalone+regions
if (BUILD_EXP_GC)
add_library_clr(clrgcexp SHARED ${GC_SOURCES})
add_library_clr(clrgcexp_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_wks PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_wks eventing_headers)
target_compile_definitions(clrgcexp_gc_wks PRIVATE USE_REGIONS)
set(CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_wks>)
if (FEATURE_SVR_GC)
add_library_clr(clrgcexp_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
set_target_properties(clrgcexp_gc_svr PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0)
add_dependencies(clrgcexp_gc_svr eventing_headers)
target_compile_definitions(clrgcexp_gc_svr PRIVATE SERVER_GC USE_REGIONS)
list(APPEND CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_svr>)
endif()

add_library_clr(clrgcexp SHARED ${GC_SOURCES} ${CLRGGCEXP_OBJECTS})
add_dependencies(clrgcexp eventing_headers)
target_link_libraries(clrgcexp PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgcexp PRIVATE gcexp_dll_wks_descriptor)
Expand All@@ -123,8 +158,20 @@ if(FEATURE_STANDALONE_GC)
install_clr(TARGETS clrgcexp DESTINATIONS . COMPONENT runtime)
endif (BUILD_EXP_GC)

add_library_clr(clrgc_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_wks eventing_headers)
set(CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_wks>)
if(FEATURE_SVR_GC)
add_library_clr(clrgc_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_svr eventing_headers)
target_compile_definitions(clrgc_gc_svr PRIVATE SERVER_GC)
list(APPEND CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_svr>)
endif()

# clrgc is build with standalone+segments
add_library_clr(clrgc SHARED ${GC_SOURCES})
add_library_clr(clrgc SHARED ${GC_SOURCES} ${CLRGC_OBJECTS})
add_dependencies(clrgc eventing_headers)
target_link_libraries(clrgc PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgc PRIVATE gc_dll_wks_descriptor)
Expand Down
99 changes: 11 additions & 88 deletions src/coreclr/gc/allocation.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

allocator::allocator (unsigned int num_b, int fbb, alloc_list* b, int gen)
{
Expand DownExpand Up@@ -1321,27 +1330,6 @@ bool gc_heap::new_allocation_allowed (int gen_number)
return TRUE;
}

inline
ptrdiff_t gc_heap::get_desired_allocation (int gen_number)
{
return dd_desired_allocation (dynamic_data_of (gen_number));
}

inline
ptrdiff_t gc_heap::get_new_allocation (int gen_number)
{
return dd_new_allocation (dynamic_data_of (gen_number));
}

//return the amount allocated so far in gen_number
inline
ptrdiff_t gc_heap::get_allocation (int gen_number)
{
dynamic_data* dd = dynamic_data_of (gen_number);

return dd_desired_allocation (dd) - dd_new_allocation (dd);
}

#ifdef SHORT_PLUGS
inline
void set_padding_in_expand (uint8_t* old_loc,
Expand DownExpand Up@@ -3253,29 +3241,6 @@ allocation_state gc_heap::allocate_soh (int gen_number,
return soh_alloc_state;
}

#ifdef BACKGROUND_GC
inline
void gc_heap::bgc_track_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Increment (&uoh_alloc_thread_count);
dprintf (3, ("h%d: inc lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

inline
void gc_heap::bgc_untrack_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Decrement (&uoh_alloc_thread_count);
dprintf (3, ("h%d: dec lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

#endif //BACKGROUND_GC

size_t gc_heap::get_uoh_seg_size (size_t size)
{
size_t default_seg_size =
Expand DownExpand Up@@ -4551,41 +4516,6 @@ BOOL gc_heap::allocate_more_space(alloc_context* acontext, size_t size,
return (status == a_state_can_allocate);
}

inline
CObjectHeader* gc_heap::allocate (size_t jsize, alloc_context* acontext, uint32_t flags)
{
size_t size = Align (jsize);
assert (size >= Align (min_obj_size));
{
retry:
uint8_t* result = acontext->alloc_ptr;
acontext->alloc_ptr+=size;
if (acontext->alloc_ptr <= acontext->alloc_limit)
{
CObjectHeader* obj = (CObjectHeader*)result;
assert (obj != 0);
return obj;
}
else
{
acontext->alloc_ptr -= size;

#ifdef _MSC_VER
#pragma inline_depth(0)
#endif //_MSC_VER

if (! allocate_more_space (acontext, size, flags, 0))
return 0;

#ifdef _MSC_VER
#pragma inline_depth(20)
#endif //_MSC_VER

goto retry;
}
}
}

void gc_heap::leave_allocation_segment (generation* gen)
{
adjust_limit (0, 0, gen);
Expand DownExpand Up@@ -5417,15 +5347,6 @@ generation* gc_heap::ensure_ephemeral_heap_segment (generation* consing_gen)

#endif //!USE_REGIONS

inline
void gc_heap::init_alloc_info (generation* gen, heap_segment* seg)
{
generation_allocation_segment (gen) = seg;
generation_allocation_pointer (gen) = heap_segment_mem (seg);
generation_allocation_limit (gen) = generation_allocation_pointer (gen);
generation_allocation_context_start_region (gen) = generation_allocation_pointer (gen);
}

inline
heap_segment* gc_heap::get_next_alloc_seg (generation* gen)
{
Expand DownExpand Up@@ -5880,3 +5801,5 @@ CObjectHeader* gc_heap::allocate_uoh_object (size_t jsize, uint32_t flags, int g

return obj;
}

} // namespace SVR/WKS
53 changes: 11 additions & 42 deletions src/coreclr/gc/background.cpp
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

// static

Expand DownExpand Up@@ -221,47 +230,6 @@ void gc_heap::concurrent_print_time_delta (const char* msg)
}

#ifdef BACKGROUND_GC
inline
BOOL gc_heap::background_marked (uint8_t* o)
{
return mark_array_marked (o);
}

inline
BOOL gc_heap::background_mark1 (uint8_t* o)
{
BOOL to_mark = !mark_array_marked (o);

dprintf (3, ("b*%zx*b(%d)", (size_t)o, (to_mark ? 1 : 0)));
if (to_mark)
{
mark_array_set_marked (o);
dprintf (4, ("n*%zx*n", (size_t)o));
return TRUE;
}
else
return FALSE;
}

// TODO: we could consider filtering out NULL's here instead of going to
// look for it on other heaps
inline
BOOL gc_heap::background_mark (uint8_t* o, uint8_t* low, uint8_t* high)
{
BOOL marked = FALSE;
if ((o >= low) && (o < high))
marked = background_mark1 (o);
#ifdef MULTIPLE_HEAPS
else if (o)
{
gc_heap* hp = heap_of (o);
assert (hp);
if ((o >= hp->background_saved_lowest_address) && (o < hp->background_saved_highest_address))
marked = background_mark1 (o);
}
#endif //MULTIPLE_HEAPS
return marked;
}

#ifdef USE_REGIONS
void gc_heap::set_background_overflow_p (uint8_t* oo)
Expand DownExpand Up@@ -3465,7 +3433,6 @@ void gc_heap::process_background_segment_end (heap_segment* seg,
bgc_verify_mark_array_cleared (seg);
}

inline
BOOL gc_heap::fgc_should_consider_object (uint8_t* o,
heap_segment* seg,
BOOL consider_bgc_mark_p,
Expand DownExpand Up@@ -4611,3 +4578,5 @@ size_t gc_heap::get_mark_array_size (heap_segment* seg)
}

#endif //USE_REGIONS

} // namespace WKS/SVR
Loading
Loading