summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
a2bb7fb)
This is a huge boost for some libcurl versions, eg 7.74 in Debian 11
Fixes https://gitlab.com/xonotic/darkplaces/-/issues/375
Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
SndSys_SendKeyEvents();
Sys_SendKeyEvents();
SndSys_SendKeyEvents();
Sys_SendKeyEvents();
+ /*
+ * If the accumulator hasn't become positive, don't
+ * run the frame. Everything that happens before this
+ * point will happen even if we're sleeping this frame.
+ */
if((cl_timer += time) < 0)
return cl_timer;
if((cl_timer += time) < 0)
return cl_timer;
// TODO can we do the same for ServerFrame? Probably not.
}
else
// TODO can we do the same for ServerFrame? Probably not.
}
else
+ {
+ if (cls.state != ca_dedicated)
+ Curl_Select(&time);
delta = Sys_DirtyTime() - time0;
if (delta < 0 || delta >= 1800)
delta = 0;
delta = Sys_DirtyTime() - time0;
if (delta < 0 || delta >= 1800)
delta = 0;
static CURLM * (*qcurl_multi_init) (void);
static CURLMcode (*qcurl_multi_perform) (CURLM *multi_handle, int *running_handles);
static CURLM * (*qcurl_multi_init) (void);
static CURLMcode (*qcurl_multi_perform) (CURLM *multi_handle, int *running_handles);
+static CURLMcode (*qcurl_multi_poll) (CURLM *multi_handle, void*, unsigned int extra_nfds, int timeout_ms, int *ret);
static CURLMcode (*qcurl_multi_add_handle) (CURLM *multi_handle, CURL *easy_handle);
static CURLMcode (*qcurl_multi_remove_handle) (CURLM *multi_handle, CURL *easy_handle);
static CURLMsg * (*qcurl_multi_info_read) (CURLM *multi_handle, int *msgs_in_queue);
static CURLMcode (*qcurl_multi_add_handle) (CURLM *multi_handle, CURL *easy_handle);
static CURLMcode (*qcurl_multi_remove_handle) (CURLM *multi_handle, CURL *easy_handle);
static CURLMsg * (*qcurl_multi_info_read) (CURLM *multi_handle, int *msgs_in_queue);
{"curl_easy_getinfo", (void **) &qcurl_easy_getinfo},
{"curl_multi_init", (void **) &qcurl_multi_init},
{"curl_multi_perform", (void **) &qcurl_multi_perform},
{"curl_easy_getinfo", (void **) &qcurl_easy_getinfo},
{"curl_multi_init", (void **) &qcurl_multi_init},
{"curl_multi_perform", (void **) &qcurl_multi_perform},
+ {"curl_multi_poll", (void **) &qcurl_multi_poll},
{"curl_multi_add_handle", (void **) &qcurl_multi_add_handle},
{"curl_multi_remove_handle",(void **) &qcurl_multi_remove_handle},
{"curl_multi_info_read", (void **) &qcurl_multi_info_read},
{"curl_multi_add_handle", (void **) &qcurl_multi_add_handle},
{"curl_multi_remove_handle",(void **) &qcurl_multi_remove_handle},
{"curl_multi_info_read", (void **) &qcurl_multi_info_read},
di->bytes_received += bytes;
di->bytes_received += bytes;
+ //Con_Printf("CURL_fwrite callback timestamp: %f bytes: %ld\n", host.realtime, ret);
+
return ret;
// Why not ret / nmemb?
// Because CURLOPT_WRITEFUNCTION docs say to return the number of bytes.
return ret;
// Why not ret / nmemb?
// Because CURLOPT_WRITEFUNCTION docs say to return the number of bytes.
if (curl_mutex) Thread_UnlockMutex(curl_mutex);
}
if (curl_mutex) Thread_UnlockMutex(curl_mutex);
}
+/*
+====================
+Curl_Select
+
+Sleeps until there's some transfer progress or a timeout is reached,
+unfortunately the timeout is only in milliseconds.
+This allows good throughput even at very low FPS.
+====================
+*/
+void Curl_Select(double *microseconds)
+{
+ if (List_Is_Empty(&downloads))
+ return;
+ if (qcurl_multi_poll(curlm, NULL, 0, *microseconds / 1000, NULL) == CURLM_OK)
+ *microseconds = 0; // either we finished waiting or a transfer progressed
+ else
+ Con_Print("There's an emergency going on!\nIt's still going on!\nMaybe you need to upgrade libcurl?\n");
+}
+
/*
====================
Curl_CancelAll
/*
====================
Curl_CancelAll
// code is one of the CURLCBSTATUS constants, or the HTTP error code (when > 0).
void Curl_Frame(void);
// code is one of the CURLCBSTATUS constants, or the HTTP error code (when > 0).
void Curl_Frame(void);
+void Curl_Select(double *microseconds);
qbool Curl_Running(void);
qbool Curl_Begin_ToFile(const char *URL, double maxspeed, const char *name, int loadtype, qbool forthismap);
qbool Curl_Running(void);
qbool Curl_Begin_ToFile(const char *URL, double maxspeed, const char *name, int loadtype, qbool forthismap);