scheduler_impl_t::wait_result_t scheduler_impl_t::wait_queue(spinlock_t* queue_lock, duration_t* timeout) { ev_timer timer_timeout; watcher_data_t watcher_data(FIBER_IMPL); deferred_unlock_t deferred(queue_lock); ev_tstamp start_wait; if(timeout) { start_wait = ev_now(ev_loop_); ev_init((ev_watcher*)&timer_timeout, switch_to_cb); ev_timer_set(&timer_timeout, timeout->count(), 0.0); ev_timer_start(ev_loop_, &timer_timeout); timer_timeout.data = &watcher_data; } FIBER_IMPL->yield(&deferred); unlink_activate(FIBER_IMPL); if(timeout) { *timeout -= duration_t(ev_now(ev_loop_) - start_wait); ev_timer_stop(ev_loop_, &timer_timeout); } if(timeout && (watcher_data.events & EV_TIMER)) { return TIMEDOUT; } else { return READY; } }
int tool_main(int argc, char** argv) { SkCommandLineFlags::Parse(argc, argv); for (int i = 0; i < FLAGS_skps.count(); i++) { if (SkCommandLineFlags::ShouldSkip(FLAGS_match, FLAGS_skps[i])) { continue; } SkAutoTDelete<SkStream> stream(SkStream::NewFromFile(FLAGS_skps[i])); if (!stream) { SkDebugf("Could not read %s.\n", FLAGS_skps[i]); return 1; } sk_sp<SkPicture> src(SkPicture::MakeFromStream(stream)); if (!src) { SkDebugf("Could not read %s as an SkPicture.\n", FLAGS_skps[i]); return 1; } if (FLAGS_defer) { SkPictureRecorder recorder; SkDeferredCanvas deferred(recorder.beginRecording(src->cullRect())); src->playback(&deferred); src = recorder.finishRecordingAsPicture(); } const int w = SkScalarCeilToInt(src->cullRect().width()); const int h = SkScalarCeilToInt(src->cullRect().height()); SkRecord record; SkRecorder canvas(&record, w, h); src->playback(&canvas); if (FLAGS_optimize) { SkRecordOptimize(&record); } if (FLAGS_optimize2) { SkRecordOptimize2(&record); } dump(FLAGS_skps[i], w, h, record); if (FLAGS_write.count() > 0) { SkPictureRecorder r; SkRecordDraw(record, r.beginRecording(SkRect::MakeIWH(w, h)), nullptr, nullptr, 0, nullptr, nullptr); sk_sp<SkPicture> dst(r.finishRecordingAsPicture()); SkFILEWStream ostream(FLAGS_write[0]); dst->serialize(&ostream); } } return 0; }
void irr::scene::ILightManagerCustom::OnRenderPassPostRender(irr::scene::E_SCENE_NODE_RENDER_PASS renderPass) { if (renderPass == irr::scene::ESNRP_SOLID) { Device->getVideoDriver()->setRenderTarget(SolidBuffer, true, false); deferred(); Device->getVideoDriver()->setRenderTarget(0, false, false); Device->getVideoDriver()->draw2DImage(SolidBuffer, irr::core::position2d<s32> (0,0)); } else if (renderPass == irr::scene::ESNRP_TRANSPARENT) { TransparentRenderPass = false; } }
void scheduler_impl_t::switch_to() { deferred_activate_t deferred(this, FIBER_IMPL); FIBER_IMPL->yield(&deferred); }