/// Flush the contents of this context to the browser's 3D device. void OpenGLContext::FlushContext() { if(flush_pending()) { // A flush is pending so do nothing; just drop this flush on the floor. return; } set_flush_pending(true); context_.SwapBuffers(pp::CompletionCallback(&FlushCallback, this)); }
void GboxInstance::FlushPixelBuffer() { if (!IsContextValid()) return; // Note that the pixel lock is held while the buffer is copied into the // device context and then flushed. m_board->redraw((uint32_t*)pixel_buffer_->data()); graphics_2d_context_->PaintImageData(*pixel_buffer_, pp::Point()); if (flush_pending()) return; set_flush_pending(true); graphics_2d_context_->Flush(pp::CompletionCallback(&FlushCallback, this)); }
void OpenGLContext::FlushContext() { if (flush_pending()) { // A flush is pending so do nothing; just drop this flush on the floor. return; } set_flush_pending(true); OSNacl* os = (OSNacl*)OS::get_singleton(); MakeContextCurrent(instance); os->iterate(); context_.SwapBuffers(pp::CompletionCallback(&FlushCallback, this)); }
void artwork_reader_manager_ng_t::on_reader_completion (const artwork_reader_ng_t * ptr) { t_size index; if (find_current_reader(ptr, index)) { m_current_readers[index]->wait_for_and_release_thread(); m_current_readers[index]->send_completion_notification(m_current_readers[index]); m_current_readers.remove_by_idx(index); } else { if (find_aborting_reader(ptr, index)) { m_aborting_readers[index]->wait_for_and_release_thread(); m_aborting_readers.remove_by_idx(index); } } flush_pending(); }
void artwork_reader_manager_ng_t::request(const metadb_handle_ptr & p_handle, pfc::rcptr_t<artwork_reader_ng_t> & p_out, t_size cx, t_size cy, COLORREF cr_back, bool b_reflection, completion_notify_artwork_base_t::ptr_t p_notify) { pfc::rcptr_t<artwork_reader_ng_t> p_new_reader; { p_new_reader = pfc::rcnew_t<artwork_reader_ng_t>(); p_new_reader->initialise(static_api_ptr_t<album_art_manager>()->instantiate(), m_requestIds, m_repositories, artwork_panel::cfg_fb2k_artwork_mode, p_handle, cx, cy, cr_back, b_reflection, p_notify, this); m_pending_readers.add_item(p_new_reader); p_out = p_new_reader; flush_pending(); } }
static bool flush_dot_state(struct dot_istream *dstream, size_t *destp) { unsigned int i = 0; if (!dstream->state_no_cr) dstream->pending[i++] = '\r'; if (dstream->state_no_lf) dstream->state_no_lf = FALSE; else if (dstream->state > 1) dstream->pending[i++] = '\n'; dstream->pending[i] = '\0'; if (dstream->state != 4) dstream->state = 0; else { /* \r\n.\r seen, go back to \r state */ dstream->state = 1; } return flush_pending(dstream, destp); }
static ssize_t i_stream_dot_read(struct istream_private *stream) { /* @UNSAFE */ struct dot_istream *dstream = (struct dot_istream *)stream; const unsigned char *data; size_t i, dest, size, avail; ssize_t ret, ret1; if (dstream->pending[0] != '\0') { if (!i_stream_try_alloc(stream, 1, &avail)) return -2; dest = stream->pos; (void)flush_pending(dstream, &dest); } else { dest = stream->pos; } if (dstream->dot_eof) { stream->istream.eof = TRUE; return i_stream_dot_return(stream, dest, -1); } /* we have to update stream->pos before reading more data */ ret1 = i_stream_dot_return(stream, dest, 0); if ((ret = i_stream_dot_read_some(dstream)) <= 0) { if (ret1 != 0) return ret1; dest = stream->pos; if (ret == -1 && dstream->state != 0) (void)flush_dot_state(dstream, &dest); return i_stream_dot_return(stream, dest, ret); } dest = stream->pos; data = i_stream_get_data(stream->parent, &size); for (i = 0; i < size && dest < stream->buffer_size; i++) { switch (dstream->state) { case 0: break; case 1: /* CR seen */ if (data[i] == '\n') dstream->state++; else { if (!flush_dot_state(dstream, &dest)) goto end; } break; case 2: /* [CR]LF seen */ if (data[i] == '.') dstream->state++; else { if (!flush_dot_state(dstream, &dest)) goto end; } break; case 3: /* [CR]LF. seen */ if (data[i] == '\r') dstream->state++; else if (data[i] == '\n') { /* EOF */ i_stream_dot_eof(dstream, &dest); i++; goto end; } else { /* drop the initial dot */ if (!flush_dot_state(dstream, &dest)) goto end; } break; case 4: /* [CR]LF.CR seen */ if (data[i] == '\n') { /* EOF */ i_stream_dot_eof(dstream, &dest); i++; goto end; } else { /* drop the initial dot */ if (!flush_dot_state(dstream, &dest)) goto end; } } if (dstream->state == 0) { if (data[i] == '\r') { dstream->state = 1; dstream->state_no_cr = FALSE; } else if (data[i] == '\n') { dstream->state = 2; dstream->state_no_cr = TRUE; } else { stream->w_buffer[dest++] = data[i]; } } } end: i_stream_skip(stream->parent, i); ret = i_stream_dot_return(stream, dest, 0) + ret1; if (ret == 0) return i_stream_dot_read(stream); i_assert(ret > 0); return ret; }