mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-10-31 16:28:05 +02:00 
			
		
		
		
	 e1e7af5440
			
		
	
	
		e1e7af5440
		
	
	
	
	
		
			
			When compiling as C++20, MOZ_CONSTINIT expands to constinit. Since gNumNormalOrHighPriorityQueuesHaveTaskScheduledMainThread's extern declaration in WebTaskScheduler.h was declared constinit, the definition in WebTaskSchedulerMainThread.cpp must also be constinit (MOZ_CONSTINIT).
dom/webscheduling/WebTaskSchedulerMainThread.cpp:15:10: error: 'constinit' specifier missing on initializing declaration of 'gNumNormalOrHighPriorityQueuesHaveTaskScheduledMainThread' [-Werror,-Wmissing-constinit]
   15 | uint32_t gNumNormalOrHighPriorityQueuesHaveTaskScheduledMainThread = 0;
      |          ^
dom/webscheduling/WebTaskScheduler.h:27:1: note: variable declared constinit here
   27 | MOZ_CONSTINIT extern uint32_t
      | ^
Differential Revision: https://phabricator.services.mozilla.com/D244285
		
	
			
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | |
| /* vim:expandtab:shiftwidth=2:tabstop=2:
 | |
|  */
 | |
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| #include "mozilla/dom/TimeoutManager.h"
 | |
| 
 | |
| #include "nsContentUtils.h"
 | |
| #include "WebTaskSchedulerMainThread.h"
 | |
| 
 | |
| namespace mozilla::dom {
 | |
| 
 | |
| MOZ_CONSTINIT uint32_t
 | |
|     gNumNormalOrHighPriorityQueuesHaveTaskScheduledMainThread = 0;
 | |
| 
 | |
| NS_IMETHODIMP WebTaskMainThreadRunnable::Run() {
 | |
|   if (mScheduler) {
 | |
|     RefPtr<WebTask> task = mScheduler->GetNextTask(true /* aIsMainThread */);
 | |
|     if (task) {
 | |
|       task->Run();
 | |
|     }
 | |
|   }
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| nsresult WebTaskSchedulerMainThread::SetTimeoutForDelayedTask(
 | |
|     WebTask* aTask, uint64_t aDelay, EventQueuePriority aPriority) {
 | |
|   JSContext* cx = nsContentUtils::GetCurrentJSContext();
 | |
|   if (!cx) {
 | |
|     return NS_ERROR_UNEXPECTED;
 | |
|   }
 | |
|   nsIGlobalObject* global = GetParentObject();
 | |
|   MOZ_ASSERT(global);
 | |
| 
 | |
|   RefPtr<DelayedWebTaskHandler> handler =
 | |
|       new DelayedWebTaskHandler(cx, this, aTask, aPriority);
 | |
| 
 | |
|   int32_t delay = aDelay > INT32_MAX ? INT32_MAX : (int32_t)aDelay;
 | |
| 
 | |
|   int32_t handle;
 | |
|   return nsGlobalWindowInner::Cast(global->GetAsInnerWindow())
 | |
|       ->GetTimeoutManager()
 | |
|       ->SetTimeout(handler, delay, /* aIsInterval */ false,
 | |
|                    Timeout::Reason::eDelayedWebTaskTimeout, &handle);
 | |
| }
 | |
| 
 | |
| bool WebTaskSchedulerMainThread::DispatchEventLoopRunnable(
 | |
|     EventQueuePriority aPriority) {
 | |
|   RefPtr<WebTaskMainThreadRunnable> runnable =
 | |
|       new WebTaskMainThreadRunnable(this);
 | |
| 
 | |
|   MOZ_ALWAYS_SUCCEEDS(
 | |
|       NS_DispatchToMainThreadQueue(runnable.forget(), aPriority));
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| void WebTaskSchedulerMainThread::
 | |
|     IncreaseNumNormalOrHighPriorityQueuesHaveTaskScheduled() {
 | |
|   ++gNumNormalOrHighPriorityQueuesHaveTaskScheduledMainThread;
 | |
| }
 | |
| 
 | |
| void WebTaskSchedulerMainThread::
 | |
|     DecreaseNumNormalOrHighPriorityQueuesHaveTaskScheduled() {
 | |
|   MOZ_DIAGNOSTIC_ASSERT(
 | |
|       gNumNormalOrHighPriorityQueuesHaveTaskScheduledMainThread > 0);
 | |
|   --gNumNormalOrHighPriorityQueuesHaveTaskScheduledMainThread;
 | |
| }
 | |
| }  // namespace mozilla::dom
 |