… | |
… | |
1896 | |
1896 | |
1897 | reheap (periodics, periodiccnt); |
1897 | reheap (periodics, periodiccnt); |
1898 | } |
1898 | } |
1899 | #endif |
1899 | #endif |
1900 | |
1900 | |
|
|
1901 | static void noinline |
|
|
1902 | timers_reschedule (EV_P_ ev_tstamp adjust) |
|
|
1903 | { |
|
|
1904 | int i; |
|
|
1905 | |
|
|
1906 | for (i = 0; i < timercnt; ++i) |
|
|
1907 | { |
|
|
1908 | ANHE *he = timers + i + HEAP0; |
|
|
1909 | ANHE_w (*he)->at += adjust; |
|
|
1910 | ANHE_at_cache (*he); |
|
|
1911 | } |
|
|
1912 | } |
|
|
1913 | |
1901 | inline_speed void |
1914 | inline_speed void |
1902 | time_update (EV_P_ ev_tstamp max_block) |
1915 | time_update (EV_P_ ev_tstamp max_block) |
1903 | { |
1916 | { |
1904 | int i; |
1917 | int i; |
1905 | |
1918 | |
… | |
… | |
1939 | ev_rt_now = ev_time (); |
1952 | ev_rt_now = ev_time (); |
1940 | mn_now = get_clock (); |
1953 | mn_now = get_clock (); |
1941 | now_floor = mn_now; |
1954 | now_floor = mn_now; |
1942 | } |
1955 | } |
1943 | |
1956 | |
|
|
1957 | /* no timer adjustment, as the monotonic clock doesn't jump */ |
|
|
1958 | /* timers_reschedule (EV_A_ rtmn_diff - odiff) */ |
1944 | # if EV_PERIODIC_ENABLE |
1959 | # if EV_PERIODIC_ENABLE |
1945 | periodics_reschedule (EV_A); |
1960 | periodics_reschedule (EV_A); |
1946 | # endif |
1961 | # endif |
1947 | /* no timer adjustment, as the monotonic clock doesn't jump */ |
|
|
1948 | /* timers_reschedule (EV_A_ rtmn_diff - odiff) */ |
|
|
1949 | } |
1962 | } |
1950 | else |
1963 | else |
1951 | #endif |
1964 | #endif |
1952 | { |
1965 | { |
1953 | ev_rt_now = ev_time (); |
1966 | ev_rt_now = ev_time (); |
1954 | |
1967 | |
1955 | if (expect_false (mn_now > ev_rt_now || ev_rt_now > mn_now + max_block + MIN_TIMEJUMP)) |
1968 | if (expect_false (mn_now > ev_rt_now || ev_rt_now > mn_now + max_block + MIN_TIMEJUMP)) |
1956 | { |
1969 | { |
|
|
1970 | /* adjust timers. this is easy, as the offset is the same for all of them */ |
|
|
1971 | timers_reschedule (EV_A_ ev_rt_now - mn_now); |
1957 | #if EV_PERIODIC_ENABLE |
1972 | #if EV_PERIODIC_ENABLE |
1958 | periodics_reschedule (EV_A); |
1973 | periodics_reschedule (EV_A); |
1959 | #endif |
1974 | #endif |
1960 | /* adjust timers. this is easy, as the offset is the same for all of them */ |
|
|
1961 | for (i = 0; i < timercnt; ++i) |
|
|
1962 | { |
|
|
1963 | ANHE *he = timers + i + HEAP0; |
|
|
1964 | ANHE_w (*he)->at += ev_rt_now - mn_now; |
|
|
1965 | ANHE_at_cache (*he); |
|
|
1966 | } |
|
|
1967 | } |
1975 | } |
1968 | |
1976 | |
1969 | mn_now = ev_rt_now; |
1977 | mn_now = ev_rt_now; |
1970 | } |
1978 | } |
1971 | } |
|
|
1972 | |
|
|
1973 | void |
|
|
1974 | ev_ref (EV_P) |
|
|
1975 | { |
|
|
1976 | ++activecnt; |
|
|
1977 | } |
|
|
1978 | |
|
|
1979 | void |
|
|
1980 | ev_unref (EV_P) |
|
|
1981 | { |
|
|
1982 | --activecnt; |
|
|
1983 | } |
|
|
1984 | |
|
|
1985 | void |
|
|
1986 | ev_now_update (EV_P) |
|
|
1987 | { |
|
|
1988 | time_update (EV_A_ 1e100); |
|
|
1989 | } |
1979 | } |
1990 | |
1980 | |
1991 | static int loop_done; |
1981 | static int loop_done; |
1992 | |
1982 | |
1993 | void |
1983 | void |
… | |
… | |
2111 | |
2101 | |
2112 | void |
2102 | void |
2113 | ev_unloop (EV_P_ int how) |
2103 | ev_unloop (EV_P_ int how) |
2114 | { |
2104 | { |
2115 | loop_done = how; |
2105 | loop_done = how; |
|
|
2106 | } |
|
|
2107 | |
|
|
2108 | void |
|
|
2109 | ev_ref (EV_P) |
|
|
2110 | { |
|
|
2111 | ++activecnt; |
|
|
2112 | } |
|
|
2113 | |
|
|
2114 | void |
|
|
2115 | ev_unref (EV_P) |
|
|
2116 | { |
|
|
2117 | --activecnt; |
|
|
2118 | } |
|
|
2119 | |
|
|
2120 | void |
|
|
2121 | ev_now_update (EV_P) |
|
|
2122 | { |
|
|
2123 | time_update (EV_A_ 1e100); |
|
|
2124 | } |
|
|
2125 | |
|
|
2126 | void |
|
|
2127 | ev_suspend (EV_P) |
|
|
2128 | { |
|
|
2129 | ev_now_update (EV_A); |
|
|
2130 | } |
|
|
2131 | |
|
|
2132 | void |
|
|
2133 | ev_resume (EV_P) |
|
|
2134 | { |
|
|
2135 | ev_tstamp mn_prev = mn_now; |
|
|
2136 | |
|
|
2137 | ev_now_update (EV_A); |
|
|
2138 | printf ("update %f\n", mn_now - mn_prev);//D |
|
|
2139 | timers_reschedule (EV_A_ mn_now - mn_prev); |
|
|
2140 | periodics_reschedule (EV_A); |
2116 | } |
2141 | } |
2117 | |
2142 | |
2118 | /*****************************************************************************/ |
2143 | /*****************************************************************************/ |
2119 | |
2144 | |
2120 | inline_size void |
2145 | inline_size void |